转载:http://lijj-72.iteye.com/blog/314192
概述
在许多项目中,都会涉及到数据权限问题,所谓数据权限是表示,在系统中即使角色相同,都有操作权限,但业务操作时受风险、额度、销售区域等业务属性限制。
如销售人员可以看到自己的销售列表,而销售经理可以看到其管辖范围内的销售人员的销售列表,而高级销售经理能看到其下辖的销售经理的销售列表,更进一步,只看金额超过1000万的单子,小于1000万的单子不看。如销售人员是销售产品的,但由于产品属性的不同,如产品属性中销售地区在“苏杭地区”,则北京地区的销售人员则不能销售。如产品属性中风险属性高,则销售人员的级别也要求高,则低级别的销售人员则不能销售该产品;进一步来讲,随着时间或形势的发展,该种产品的风险并没有那么大,低级别的销售人员也可以销售;或者该种产品低级别的销售人员销售该种产品的金额小于100w,而高级别的人员销售100w等等。
架构分析及设计
在设计之初就确定了数据权限所处的位置,和操作权限类似,操作权限一般是放在MVC的controller层,作为插件来控制是否有操作权限。数据权限也可以这样设计,但数据权限更多地是和业务逻辑纠缠在一起,因此数据权限可以作为插件放在业务层(Model),更优雅的设计是以模板模式在业务缺省实现基类中,作为过滤。如下图所示,BizClass其实代表业务层的复杂设计,在做分析设计的过程中,我的经验是尽最大可能理解需求,并尽最大可能直白地把需求展现出来,而不是在设计之初先定义什么设计模式,设计模式是在搞清楚需求并能够给出较完整的设计思路后才考虑的。当然,在设计之初也要首先定义其所在软件架构的位置。
从需求方面讲,要达到根据操作人就能够给出该操作人的数据权限,包括查询的详细程度及数据操作规则等。从这儿我们就可以分析出来要获取数据权限,有两个参数userId,
bizName。
其实任何业务需求的设计的途径都是类似的,都是“来料加工”,有原材料,有目标成品,然后把原材料加工成目标成品。当然在其中要考虑很多因素,面向对象的设计思想很重要,不要在设计之初就考虑要多少个表,表之间的关联关系,什么一对多,多对多,关联表。首先要考虑需要业务上有那些需求,这些业务功能如何转变成某些用例,这些用例是如何转换成若干的业务类,这些类有那些属性或方法来实现这些业务功能。而表仅仅是某些实体类的数据存储,不能表现为业务逻辑。也很难体现设计者的思路。
组织机构与(岗位VS角色)
<!----><v:shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><!----><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style="WIDTH: 400.5pt; HEIGHT: 202.5pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\07\clip_image001.png" o:title=""></v:imagedata></v:shape>
系统设计中,往往会把操作权限和数据权限混为一谈,使用角色权限来控制,这其实就走入了误区,因为操作权限是解决能不能做的问题,数据权限是解决做多大幅度问题。因为角色是没有级别概念的,也就是说没有上下级概念的。
因此在计了“岗位”的概念,岗位是分级别的,且上下级汇报关系的,在这儿还设计了区域(region)属性,是基于某些需求需要,这样设计是基于有些公司的管理是分为矩阵式管理,既有部门,也根据产品线分为事业群管理的。
如下图所示,组织机构是分上下级的,组织机构中包含若干岗位,因工作职责定岗,用户是属于某个岗位的。这就和原来的设计中组织机构和人的关系中增加了岗位的中间层,也就是说,组织机构中只包含其业务中需要设置的岗位,这些岗位由人员来充实,换句话说,组织机构中不养闲人,呵呵!
岗位中一个重要的概念是资源管理,为了简化设计,某一个岗位只是为处理单一的某个业务所设置的,其中bizes属性表示该岗位所涉及的业务有若干的资源。
业务资源与数据权限规则
这组类的主要功能是完成原材料的准备及数据规则与岗位的映射,其中并没有实体类参与,这些类背后需要数据的支撑,到这时再考虑数据存储不迟。例如BizDatRuler后面就需要实体类,可能是多个相关表的数据。
类Resource中包含多个产品的数据权限规则,在ProductInfo其中dataRulers表示(key=positionGrades value=BizRuler),在类BizDataRuler 属性positionGrades 如:3,4,5,6,以逗号分隔,表示某个规则适用与某些级别的岗位,属性productRulers的HashMap<String productAttr,String scope>,其中scope中关于数字范围用“[()]”表示,“[”表示大于等于,“(”表示大于,“)”表示小于,"]"表示小于等于,如“[300,550)”表示大于等于300,小于500。如果是散列数,用“{}”表示,如“{30,50,70}”表示只有属性等于30,40,50的才有数据权限,如“{上海,苏州,杭州}”在表示只在上海,苏州,杭州有效。这就类似与格式化文本的处理方式,简化了文本解析。
<o:p> </o:p>
<v:shape id="_x0000_i1027" type="#_x0000_t75" style="WIDTH: 404.25pt; HEIGHT: 206.25pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\07\clip_image005.png" o:title=""></v:imagedata></v:shape>
<o:p> </o:p>
附录:数据权限模块设计类图:
努力,在于我热爱我的事业,与中国的软件一起走向成熟,走向世界。
联系作者:lijj_72@hotmail.com<o:p></o:p>
<v:shape id="_x0000_i1028" type="#_x0000_t75" style="WIDTH: 414.75pt; HEIGHT: 271.5pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\07\clip_image007.png" o:title=""></v:imagedata></v:shape>
分享到:
相关推荐
### 通用数据权限管理系统设计详解 #### 一、引言 在现代企业的信息化管理中,权限管理成为确保数据安全和合理使用的关键环节。一个高效、灵活的通用数据权限管理系统不仅能够提升企业的运营效率,还能更好地保护...
在当前企业级应用开发领域,数据权限管理是保证数据安全与隐私的关键技术之一。本文针对JEECGBPM这一业务流程管理平台,详细介绍了如何利用自定义SQL表达式实现数据权限的控制。JEECG(JavaEE Code Generation ...
### 帆软报表数据权限控制设计文档 #### 一、背景与需求描述 随着企业对数据精细化管理的要求越来越高,特别是在跨境电商行业中,如何确保不同层级的员工能够访问他们需要的数据,同时保护敏感信息不被非授权人员...
美团技术沙龙中提到的数据权限管理方案是互联网企业中用以保证数据安全和合理使用的常见技术方案。数据权限管理是指对不同用户访问数据资源进行控制的一系列方法和流程。它确保用户只能访问其被授权的数据,同时保护...
数据权限控制是信息系统安全的重要组成部分,它涉及到如何管理和限制用户对特定数据的访问。在IT领域,特别是数据库管理和Web应用开发中,数据权限控制是一项核心任务。Liger UI是一个前端框架,提供了丰富的UI组件...
做到代码低侵入度,在开发时不需要太多关注数据权限控制,可以在应用开发完成后,通过对表和视图定义权限控制策略,然后绑定到登录用户或功能URI上来进行数据权限控制。数据访问控制需要调整时,只需要修改定义的...
在IT行业中,数据权限设计是构建安全、高效系统的关键环节,尤其在企业级应用中尤为重要。数据权限设计涉及用户对数据的访问、修改和管理能力,确保数据的安全性,同时提供个性化的用户体验。这里我们将深入探讨这个...
数据权限的实现数据权限的实现数据权限的实现数据权限的实现
通用数据权限管理系统设计定义 本文提供了一种集成功能权限和数据权限的解决方法,以满足多层次组织中权限管理方面的集中控制。本方法是基于角色的访问控制方法(RBAC)的进一步扩展和延伸,即在功能权限的基础上...
通用RBAC权限设计及其数据权限和分库分表 支持服务限流、动态路由、灰度发布、 支持常见登录方式, 多系统SSO登录 基于 Spring Cloud Hoxton 、Spring Boot 2.3、 OAuth2 的RBAC权限管理系统 提供对常见容器化支持 ...
在企业级应用开发中,数据权限控制是必不可少的一部分,它涉及到不同用户或角色对数据库中数据的访问范围。Spring AOP(面向切面编程)是一个强大的工具,常用于实现业务逻辑中的横切关注点,如日志、事务管理以及...
JEECG微云快速开发平台是一个基于代码生成器的智能开发...而JEECG微云快速开发平台提供的数据权限操作手册,则是一份实用的指南,指导用户如何在该平台上有效地管理和配置数据权限,确保系统的数据安全和操作的准确性。
WEB应用数据权限控制是企业信息系统中非常重要的一环,它确保了不同用户在访问系统数据时,只能查看或操作属于其权限范围内的信息。在WEB应用中,数据权限控制通常与用户的身份认证、会话管理、数据库访问控制等方面...
芋道管理后台,基于 Vue3 + Element Plus 实现,支持 RBAC 动态权限、数据权限、SaaS 多租户、Flowable 工作流、三方登录、支付、短信、商城、CRM、ERP 等功能.zip
数据权限在IT系统开发中扮演着至关重要的角色,它确保了信息的安全性和合规性。本文主要探讨了如何在C#环境中设计数据权限,特别是在功能权限基础上进行扩展的【数据权限】设计。 首先,我们需要理解权限控制的三个...
芋道管理后台,基于 Vue2 + Element UI 实现,支持 RBAC 动态权限、数据权限、SaaS 多租户、Flowable 工作流、三方登录、支付、短信、商城、CRM、ERP 等功能.zip
做到代码低侵入度,在开发时不需要太多关注数据权限控制,可以在应用开发完成后,通过对表和视图定义权限控制策略,然后绑定到登录用户或功能URI上来进行数据权限控制。数据访问控制需要调整时,只需要修改定义的...
数据权限在IT开发,尤其是企业级应用开发中扮演着至关重要的角色。UAP开发之数据权限主要关注如何根据用户和角色设定对系统档案和单据的访问限制,以确保业务处理的安全性和隐私保护。这种权限控制包括记录级权限和...
### 金蝶K3数据权限管理详解 #### 一、数据权限的概念与作用 数据权限是企业级管理系统中一个非常重要的组成部分,它涉及到系统中数据的安全性和保密性问题。在金蝶K3系统中,数据权限主要指的是用户对特定数据进行...