针对于集团应用系统的数据权限控制
CshBBrain
2010-12-24
针对于集团应用系统的数据权限控制
系统中的组织机构介绍:系统中有多个集团,每个集团下有多个公司以及公司,每个公司下又有多个直属部门和办事处,办事处下面又有多个部门 业务往来关系:1个集团下的公司,分公司相互之间存在业务往来;当然公司下的部门之间,办事处之间,以及办事 处下的部门之间肯定是存在相互业务往来的,比如财务部门要计算工资,必须需要人力资源部的考勤数据和专业部门的奖励惩罚数据等;公司之间的部门 亦可存在相互业务往来,集团部门和各公司部门之间亦存在业务往来, 比如各公司分公司的人力资源部门和集团人力资源 存在业务往来,集团人力资源对集团内的人力资源做整体上的规划,监督,考核执行,而各公司分公司人力资源部门执行各公司的人力资源管理工作,其他专业体 系也具有类似架构; 集团和各公司,分公司存在业务往来; 1个集团和其他多个集团可能存在业务上的往来;集团下的公司,分公司与系统中的其他集团中的公司, 分公司存在业务往来, 比如A集团下的a公司有个工程承包给B集团的b公司负责建设,a公司的对应部门需要对b公司的工程进度,质量等等监督。 根据描述系统中的业务往来就成了一个业务网,业务复杂;而数据权限的控制也是一个头痛的事情: 数据权限通用规则: 对于一般用户来说: 1.有些数据是行业标准,系统中的所有集团中的所有用户多可以查看和维护。 2.有些数据是某个集团内部所有用户都可以查看维护。 3.有些数据是只有某个公司内部的所偶有人可以维护查看。 4.有些数据是只有某个部门下的所有人可以查看维护。 5.还有一些数据只有这个数据的拥有人才可以查看维护。 不同于有些特权用户(不管你这个功能的数据权限怎样控制)的权限规则: 1.某些用户可以查看维护集团内的所有数据。 2.某些用户可以查看维护公司内部的所有数据 3.某些用户可以维护查看某个部门的所有数据 4.某些用户可以查看维护其他一些公司,一些部门的数据。 5.有些用户可以维护其他集团中某些公司,某些部门的数据。 这样的数据权限控制系统怎样设计呢?希望有这方面设计经验的朋友建议下。 |
|
CshBBrain
2010-12-25
这么冷清呀,我先说说自己的考虑吧,希望能起到抛砖引玉的作用:
1.系统肯定提供菜单功能注册管理的功能,且细化到功能按钮级别(增删改查),每个菜单功能都设计一个 【数据权限控制策略】,分为系统控制级:系统中所有用户都可以维护,集团控制级别:集团内所有用户都可以维护,公司分公司级别:公司分公司中的所有用户都可以维护,部门级别:部门内所有用户都可以维护,用户级别:只有数据的创建人可以维护。 2.数据权限和具体部门下的角色也有很大的关系,所以系统中少不了角色;给每个角色设计一个【数据权限控制策略】,分为系统控制级:可以维护系统中所有数据,集团控制级别:可以维护集团内所有数据,公司分公司级别:可以维护公司分公司内的所有数据,部门级别:可以维护部门内所有数据。 3.另外为了解决无规则的数据权限控制需求,设计一个针对部门下面的角色和人的数据权限授予功能,可以在这里指定角色或人能维护哪些组织机构单元中的数据(本来打算使用这一种方式处理所有权限控制,但考虑到系统管理员授予数据权限的工作量太大,系统管理员非常抵制这种做法)。 4.数据权限的过滤技术需要使用到AOP拦截器,过滤器以及权限数据的缓存,将某次查询的数据过滤条件附件到具体的查询条件上,好了,这里先抛开具体的实现技术和方法。 5.数据权限计算规则: 5.1如果此菜单功能的【数据权限控制策略】为系统级别,好说,不做任何数据过滤。 5.2如果此菜单功能的【数据权限控制策略】为集团级别,则如果当前访问用户的角色的【数据权限控制策略】为系统级别,则不做任何数据过滤;如果当前访问用户的角色的【数据权限控制策略】为集团级别以及更低的级别,则不用户可以访问其所在集团的所有数据 + 授予给此角色或用户的特殊数据权限。 5.2如果此菜单功能的【数据权限控制策略】为公司级别,则如果当前访问用户的角色的【数据权限控制策略】为系统级别,则不做任何数据过滤;如果当前访问用户的角色的【数据权限控制策略】为集团级别,则不用户可以访问其所在集团的所有数据 + 授予给此角色或用户的特殊数据权限。如果当前访问用户的角色的【数据权限控制策略】为公司级别以及更低的级,则当前用户可以访问其所在公司的所有数据 + 授予给此角色或用户的特殊数据权限。 依次类推。。。。。。。。 但客户还是觉得麻烦,有没有更简单的方案呢 |
|
javamonkey
2010-12-27
说的挺好的呀,需求本来就是这样,为啥客户觉得麻烦了?。
我觉得你可以给客户简化表达一下你的意思:数据资源与角色关联,数据访问层使用过滤技术就行了吧。 我猜是你把需求和设计混在一起说了吧,客户觉得内容太多? |
|
kurier
2011-01-06
我觉得使用默认权限+特殊权限的方式是会增加复杂度。
统一解决就好了,客户也好理解些 |
|
yongtree
2011-01-20
数据权限有必要跟功能菜单绑定吗?
是不是可以单独定义。 |
|
yongtree
2011-01-20
数据权限是不是要用组织结构中的岗位来控制,角色控制功能权限。如果全部用角色控制,会使角色太多。
http://blog.csdn.net/lijj_72/archive/2008/12/13/3510881.aspx |
|
xieliankang
2011-03-18
个人觉得这一类业务需求的本质就是什么人可以做什么事(功能菜单),不防从下面几个角度来考虑:
1.公司:集团与分公司之前的关系 2.部门:公司内容部门,即组织架构 3.角色:部门相关,至少是公司相关 4.角色类型:公司无关,针对整个集团 结合功能菜单设置权限: 查看、编辑、管理; 对应人员关联:按公司,按部门,按角色,按角色类型。 |
|
w412692660
2011-03-24
首先,顶上,回答一下试试,当然,一样是粗陋不堪的设计,抛砖引玉,不过问题确实很好;
我从三个方面来回答, 第一个方面,是从我如果在现实项目中遇到,如何去做,一般是保守的做法,估计没有特别新奇的东西,都是些老土概念和做法,重点稳定; 第二个方面,是用楼主的思维去作出设计,然后,去说说优缺点,这样设计我也做过,是在一个简单资源管理系统,当时由于是简单用户权限,直接用角色->功能,这个当然和楼主思想有些差异,不过有仔细看过楼主 的言论,到时有叙述错误的地方,还请纠正; 第三方面,属于个人突发奇想..就是那种一拍脑袋想出来的...哈.不敢用于项目中,因为怕有意想不到的问题蹦出来,哈哈,这个纯属实验性的解决方案; 好,我们从第一个方面来说: 我是从数据库表+领域模型来说这个事情, 首先,我们组织结构设计方法有很多,但是总体来说一般就是万能型和业务型,万能型就是用户->用户组那一套,业务就是根据业务来设计,当然业务负责选择业务来设计是很OK的, 在第一方面里,我们使用业务主键来设计,在第二,三方面,我们会换其他的设计,哈,一个一个来,因为行业项目业务复杂的,一般我都会用业务主键,当然是某些地方是混用的; 具体就不写具体属性啦,这是初步的组织结构; 我们要解决的问题,其实是两个问题 :人员的权限,内容,我们用此来建立领域模型; 内容:我在内容建模时,只想一般用户,我们只为一般用户服务,OK; 人员权限:是非正常的特权; 注:这里我看楼主叙述时,没有将查看与维护的权限分类,这么我们就将查看与维护合并,当然如果查看与维护分离设置,可能设计时会有部分不同,至少比现在的设计多张表; 内容的领域模型: 为人的权限建模: 最后设计出来的表: 企业基本信息: 组件权限管理: 内容信息管理: 这样的话,就可以正常走[内容管理]可以,因为从创建人就可以定义的他可以制定的内容级别范围,从而创建人自由设定设定发布内容的权限 走特权的人,走授权策略路线,查询时先查询是否是特权用户或者特权部门,特权是可以配置的,所以可以临时; 这样管理员只需要配置特权的人就OK,或者临时特权; 这是从数据库表,定义出结构,不知道明白没有,不知不觉写了这么多....... 结果只写第一个方面,明天在写第二方面....哈哈,有不妥当的地方还望指出..纯属抛砖! |
|
凤舞凰扬
2011-03-31
楼上的截图都已经失效了,建议啊,先把图片存放在本地,再使用。
|
|
w412692660
2011-04-03
.....OK,一直不知道,可以有上载图片的功能
|