`
CshBBrain
  • 浏览: 650034 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:144900
Group-logo
HTML5移动开发
浏览量:137837
社区版块
存档分类
最新评论

针对于集团应用系统的数据权限控制

阅读更多
针对于集团应用系统的数据权限控制
系统中的组织机构介绍:系统中有多个集团,每个集团下有多个公司以及公司,每个公司下又有多个直属部门和办事处,办事处下面又有多个部门
业务往来关系:1个集团下的公司,分公司相互之间存在业务往来;当然公司下的部门之间,办事处之间,以及办事
处下的部门之间肯定是存在相互业务往来的,比如财务部门要计算工资,必须需要人力资源部的考勤数据和专业部门的奖励惩罚数据等;公司之间的部门
亦可存在相互业务往来,集团部门和各公司部门之间亦存在业务往来,
比如各公司分公司的人力资源部门和集团人力资源
存在业务往来,集团人力资源对集团内的人力资源做整体上的规划,监督,考核执行,而各公司分公司人力资源部门执行各公司的人力资源管理工作,其他专业体
系也具有类似架构;
集团和各公司,分公司存在业务往来; 1个集团和其他多个集团可能存在业务上的往来;集团下的公司,分公司与系统中的其他集团中的公司,
分公司存在业务往来,
比如A集团下的a公司有个工程承包给B集团的b公司负责建设,a公司的对应部门需要对b公司的工程进度,质量等等监督。

根据描述系统中的业务往来就成了一个业务网,业务复杂;而数据权限的控制也是一个头痛的事情:
数据权限通用规则:
对于一般用户来说:
1.有些数据是行业标准,系统中的所有集团中的所有用户多可以查看和维护。
2.有些数据是某个集团内部所有用户都可以查看维护。
3.有些数据是只有某个公司内部的所偶有人可以维护查看。
4.有些数据是只有某个部门下的所有人可以查看维护。
5.还有一些数据只有这个数据的拥有人才可以查看维护。

不同于一般用户的有些特权用户(不管你这个功能的数据权限怎样控制)的权限规则:
1.某些用户可以查看维护集团内的所有数据。
2.某些用户可以查看维护公司内部的所有数据
3.某些用户可以维护查看某个部门的所有数据
4.某些用户可以查看维护其他一些公司,一些部门的数据。
5.有些用户可以维护其他集团中某些公司,某些部门的数据。

这样的数据权限控制系统怎样设计呢?希望有这方面设计经验的朋友建议下。

这里需要补充一点:不同组织机构单元下的相同的角色他们的数据权限可能大相径庭!
分享到:
评论
13 楼 CshBBrain 2010-12-26  
hustlxjaw 写道
CshBBrain 写道
hustlxjaw 写道
你这样理论上应该是可以实现的,但是通用性不强,稍微发生一点变化很难应对。
如果是我设计数据权限,肯定要求能够灵活管理数据权限组(数据权限的分类依据),然后将数据权限组与功能、角色关联起来。如果数据权限组之间可能也有逻辑关系,这个就需要去定制了;如果数据权限组之间没有逻辑关系,就比较简单了。
另外,SpringSecurity在数据权限控制方面有一个“后拦截”的处理方式,在某种条件下也是可以借鉴的。
上面是我对数据权限的理解,但是暂时还没有时间来整理相关文档,最近在弄报表。。


这位兄台,你所提出得“数据权限组” 以及它和功能,角色之间的关系是否可以说得再详细点以达到通用的目的,还有管理员在设置的时候务必要操作简单,工作量要少,且便于理解。


数据权限组只是将需要划分数据权限的数据的一个分类标准,比如现在有一个数据权限组叫做机构,机构这个数据权限组的内容包括财务部、人力资源部、开发部等。数据权限组只是用来描述数据的划分的,真正的数据权限组下的项才控制数据权限,比如数据都跟财务部、人力资源部产生关系。
通过角色与功能点、数据权限组的管理,可以实现同样的角色,不同功能点具有不同数据权限。

终于明白你的意思了,你的数据权限组大概就是 数据权限复用的一个思想,我先在系统中建好一些数据权限组,并设置好这些权限组的数据权限,再使用数据权限组来给角色或人授予数据权限,以达到减少系统管理员的工作量,这个思想不错,赞一个,谢谢!
12 楼 CshBBrain 2010-12-26  
AngelAndAngel 写道
   你这个问题我曾经也遇到过,我觉得像这种数据权限不能迷信现在的一些所谓的权限框架,只能浪费时间。首先你要的是数据权限控制,而数据权限呢是需要通过菜单权限来体现的,这里面有重合也有不同点。你如你刚才举得例子,如
集团--公司--办事处--部门--个人,有可能这四个域里面的人都有 订单提交历史记录这个菜单权限,那么点击进去呢,会出现各自的数据,比如,集团的域里面需要看到所有集团数据,公司是看到公司所有的数据,办事处,部门,个人以此类推。我们针对这种情况是这样设计的,首先,公司组织部门要设计成树状结构,每个组织(如集团,公司等),在数据库都有自己的部门路径(比如id组成的1,2,3),当然,还得有权限表,用户表,角色表,用户权限表,角色权限表(一般每个人都对应一个角色,而用户权限表是用来给那些特殊人用的,可以在角色权限的基础上多加一些额外的权限)。其次,权限的类别,可以分为,功能模块权限,比如订单管理,用户管理这些大菜单;数据列表权,如上述的订单提交历史;数据操作权(如添加,修改需要的权限);数据范围权限,控制数据列表的范围的,一般是别的数据列表的子权限,很重要。。下面分类介绍:
  1,功能模块权:很简单,就是属于菜单的权限。就是每棵树的最上级,点击出来也最多是折叠收缩之内的。
  2,数据列表权:重点。比如订单历史列表这样的,点击可得到相应的数据列表的,那怎么得到自己该得到的数据呢,在这个权限下面一般都会有类别为数据范围的子权限,如集团数据,公司数据,办事处数据,部门数据,个人数据这些,添加这类子权限的时候,会让你输入范围,举个例子,假如这个人他只能看到本部门数据,那么可以这样填写范围
@commitUser.deptId=$session_operator.loginUser.deptId。在后台呢,专门设计一个通用的解析这类语句的工具,如把@号可以自动转换成你的数据表的别名(当然,你的订单表中肯定要有commiUser字段啊),把$session_operator转化成从session中获取的对象,这样的话,后台直接拼装转化后的sql,ok了。这样的话,你想得到哪些数据就可以得到,方便扩展和一些人事方面的特殊需求。等你把权限添加好后,管理员分配时,他会看到这样的结构,订单管理(功能模块权)下有订单历史记录(数据列表权),下面集团数据,公司数据,部门数据,个人数据这些范围权。他选什么就只能看到什么。假如某个人还有个特殊权利,想看到办事处的和已经完成的订单,很简单,你给他添加一个 办事处和已完成这个范围权限,然后把范围设置成@commitUser.deptId like $session_operator.loginUser.deptPath。然后管理员给他分配这个权限就ok了。
我是用java做的 ssh框架,但是对于其他语言的话,其实都差不多,原理是一样的。
我只看了一下你的帖子,感觉应该和我说的类似吧,咱可以讨论讨论。

你的方案写的挺详细的,非常感激,你也会了不少心思吧,呵呵!再次感谢!仔细阅读了你的方案,在你的方案中特有的数据权限设置可能会有点麻烦;数据权限包括能否查看某个部门的数据,能否修改某个部门的数据,能否添加某个部门的数据,能否删除某个部门的数据。你所提出的方案应该可以实现,但这样做是否每个角色都要设置一下每个功能的数据权限(如果是,那系统管理员会非常抵制这种方案,系统给他增加了工作量),另外在这里需要补充一点:不同组织机构单元下的相同的角色他们的数据权限可能大相径庭!
11 楼 hustlxjaw 2010-12-26  
CshBBrain 写道
hustlxjaw 写道
你这样理论上应该是可以实现的,但是通用性不强,稍微发生一点变化很难应对。
如果是我设计数据权限,肯定要求能够灵活管理数据权限组(数据权限的分类依据),然后将数据权限组与功能、角色关联起来。如果数据权限组之间可能也有逻辑关系,这个就需要去定制了;如果数据权限组之间没有逻辑关系,就比较简单了。
另外,SpringSecurity在数据权限控制方面有一个“后拦截”的处理方式,在某种条件下也是可以借鉴的。
上面是我对数据权限的理解,但是暂时还没有时间来整理相关文档,最近在弄报表。。


这位兄台,你所提出得“数据权限组” 以及它和功能,角色之间的关系是否可以说得再详细点以达到通用的目的,还有管理员在设置的时候务必要操作简单,工作量要少,且便于理解。


数据权限组只是将需要划分数据权限的数据的一个分类标准,比如现在有一个数据权限组叫做机构,机构这个数据权限组的内容包括财务部、人力资源部、开发部等。数据权限组只是用来描述数据的划分的,真正的数据权限组下的项才控制数据权限,比如数据都跟财务部、人力资源部产生关系。
通过角色与功能点、数据权限组的管理,可以实现同样的角色,不同功能点具有不同数据权限。
10 楼 AngelAndAngel 2010-12-26  
   你这个问题我曾经也遇到过,我觉得像这种数据权限不能迷信现在的一些所谓的权限框架,只能浪费时间。首先你要的是数据权限控制,而数据权限呢是需要通过菜单权限来体现的,这里面有重合也有不同点。你如你刚才举得例子,如
集团--公司--办事处--部门--个人,有可能这四个域里面的人都有 订单提交历史记录这个菜单权限,那么点击进去呢,会出现各自的数据,比如,集团的域里面需要看到所有集团数据,公司是看到公司所有的数据,办事处,部门,个人以此类推。我们针对这种情况是这样设计的,首先,公司组织部门要设计成树状结构,每个组织(如集团,公司等),在数据库都有自己的部门路径(比如id组成的1,2,3),当然,还得有权限表,用户表,角色表,用户权限表,角色权限表(一般每个人都对应一个角色,而用户权限表是用来给那些特殊人用的,可以在角色权限的基础上多加一些额外的权限)。其次,权限的类别,可以分为,功能模块权限,比如订单管理,用户管理这些大菜单;数据列表权,如上述的订单提交历史;数据操作权(如添加,修改需要的权限);数据范围权限,控制数据列表的范围的,一般是别的数据列表的子权限,很重要。。下面分类介绍:
  1,功能模块权:很简单,就是属于菜单的权限。就是每棵树的最上级,点击出来也最多是折叠收缩之内的。
  2,数据列表权:重点。比如订单历史列表这样的,点击可得到相应的数据列表的,那怎么得到自己该得到的数据呢,在这个权限下面一般都会有类别为数据范围的子权限,如集团数据,公司数据,办事处数据,部门数据,个人数据这些,添加这类子权限的时候,会让你输入范围,举个例子,假如这个人他只能看到本部门数据,那么可以这样填写范围
@commitUser.deptId=$session_operator.loginUser.deptId。在后台呢,专门设计一个通用的解析这类语句的工具,如把@号可以自动转换成你的数据表的别名(当然,你的订单表中肯定要有commiUser字段啊),把$session_operator转化成从session中获取的对象,这样的话,后台直接拼装转化后的sql,ok了。这样的话,你想得到哪些数据就可以得到,方便扩展和一些人事方面的特殊需求。等你把权限添加好后,管理员分配时,他会看到这样的结构,订单管理(功能模块权)下有订单历史记录(数据列表权),下面集团数据,公司数据,部门数据,个人数据这些范围权。他选什么就只能看到什么。假如某个人还有个特殊权利,想看到办事处的和已经完成的订单,很简单,你给他添加一个 办事处和已完成这个范围权限,然后把范围设置成@commitUser.deptId like $session_operator.loginUser.deptPath。然后管理员给他分配这个权限就ok了。
我是用java做的 ssh框架,但是对于其他语言的话,其实都差不多,原理是一样的。
我只看了一下你的帖子,感觉应该和我说的类似吧,咱可以讨论讨论。
9 楼 CshBBrain 2010-12-26  
hustlxjaw 写道
你这样理论上应该是可以实现的,但是通用性不强,稍微发生一点变化很难应对。
如果是我设计数据权限,肯定要求能够灵活管理数据权限组(数据权限的分类依据),然后将数据权限组与功能、角色关联起来。如果数据权限组之间可能也有逻辑关系,这个就需要去定制了;如果数据权限组之间没有逻辑关系,就比较简单了。
另外,SpringSecurity在数据权限控制方面有一个“后拦截”的处理方式,在某种条件下也是可以借鉴的。
上面是我对数据权限的理解,但是暂时还没有时间来整理相关文档,最近在弄报表。。


这位兄台,你所提出得“数据权限组” 以及它和功能,角色之间的关系是否可以说得再详细点以达到通用的目的,还有管理员在设置的时候务必要操作简单,工作量要少,且便于理解。
8 楼 nethaoke 2010-12-25  
建议把菜单功能的数据权限控制策略放到表级别  还有针对A集团能访问B集团的数据  可以设置一个表 维护集团之间共享数据的表 再针对表的访问级别 访问相应的数据  把数据的访问级别放到表级别 把功能的访问权限如菜单的访问放到角色级别
7 楼 tianlinzx 2010-12-25  
有没有考虑 Shiro的Permission控制???这个库轻巧,功能也足。建议楼主参考一下。
6 楼 hustlxjaw 2010-12-25  
你这样理论上应该是可以实现的,但是通用性不强,稍微发生一点变化很难应对。
如果是我设计数据权限,肯定要求能够灵活管理数据权限组(数据权限的分类依据),然后将数据权限组与功能、角色关联起来。如果数据权限组之间可能也有逻辑关系,这个就需要去定制了;如果数据权限组之间没有逻辑关系,就比较简单了。
另外,SpringSecurity在数据权限控制方面有一个“后拦截”的处理方式,在某种条件下也是可以借鉴的。
上面是我对数据权限的理解,但是暂时还没有时间来整理相关文档,最近在弄报表。。
5 楼 CshBBrain 2010-12-25  
主要是设计方案上,具体的实现可以不考虑;acgi几年前改造过,已经放弃这个很久了,在菜单功能权限控制方面还不如我自己实现的好,尤其是效率上面;数据权限控制和功能菜单的控制是又差别的,感觉扩展acgi达不到我的目标。
另外权限控制方面的东西我也做了些,具体的实现技术和思想不是什么问题,只要有好的解决方案。
4 楼 抛出异常的爱 2010-12-25  
没有多平台通讯的问题的话.
很多系统都有这种功能
都是层级可配置的
3 楼 CshBBrain 2010-12-25  
这么冷清呀,我先说说自己的考虑吧,希望能起到抛砖引玉的作用:
1.系统肯定提供菜单功能注册管理的功能,且细化到功能按钮级别(增删改查),每个菜单功能都设计一个 【数据权限控制策略】,分为系统控制级:系统中所有用户都可以维护,集团控制级别:集团内所有用户都可以维护,公司分公司级别:公司分公司中的所有用户都可以维护,部门级别:部门内所有用户都可以维护,用户级别:只有数据的创建人可以维护。
2.数据权限和具体部门下的角色也有很大的关系,所以系统中少不了角色;给每个角色设计一个【数据权限控制策略】,分为系统控制级:可以维护系统中所有数据,集团控制级别:可以维护集团内所有数据,公司分公司级别:可以维护公司分公司内的所有数据,部门级别:可以维护部门内所有数据。
3.另外为了解决无规则的数据权限控制需求,设计一个针对部门下面的角色和人的数据权限授予功能,可以在这里指定角色或人能维护哪些组织机构单元中的数据(本来打算使用这一种方式处理所有权限控制,但考虑到系统管理员授予数据权限的工作量太大,系统管理员非常抵制这种做法)。
4.数据权限的过滤技术需要使用到AOP拦截器,过滤器以及权限数据的缓存,将某次查询的数据过滤条件附件到具体的查询条件上,好了,这里先抛开具体的实现技术和方法。
5.数据权限计算规则:
5.1如果此菜单功能的【数据权限控制策略】为系统级别,好说,不做任何数据过滤。
5.2如果此菜单功能的【数据权限控制策略】为集团级别,则如果当前访问用户的角色的【数据权限控制策略】为系统级别,则不做任何数据过滤;如果当前访问用户的角色的【数据权限控制策略】为集团级别以及更低的级别,则不用户可以访问其所在集团的所有数据 + 授予给此角色或用户的特殊数据权限。
5.2如果此菜单功能的【数据权限控制策略】为公司级别,则如果当前访问用户的角色的【数据权限控制策略】为系统级别,则不做任何数据过滤;如果当前访问用户的角色的【数据权限控制策略】为集团级别,则不用户可以访问其所在集团的所有数据 + 授予给此角色或用户的特殊数据权限。如果当前访问用户的角色的【数据权限控制策略】为公司级别以及更低的级,则当前用户可以访问其所在公司的所有数据 + 授予给此角色或用户的特殊数据权限。
依次类推。。。。。。。。

但客户还是觉得麻烦,有没有更简单的方案呢
2 楼 CshBBrain 2010-12-24  
不需要控制到字段级别。
1 楼 CshBBrain 2010-12-24  
数据权限控制的粒度在针对某条数据是否可以查看,是否可以修改,删除;新增时需要指定数据的归属。

相关推荐

    通用数据权限管理系统设计定义.pdf

    * 在实际应用中,数据权限的控制点一般相对固定,如针对公司、部门、个人、客户、供应商等。 * 数据权限的依赖于功能权限,是对功能权限的进一步描述,说明角色在指定的功能点上的数据控制权限。 * 本方法中采用 ...

    基于J2EE体系的Web应用系统权限控制框架整合.pdf

    总结来说,基于J2EE的Web应用系统权限控制框架整合是通过分层设计、设计模式和数据过滤机制,实现了一种高灵活性、低耦合度的权限管理架构。这种架构不仅提高了系统的安全性,还降低了维护和升级的成本,适应了现代...

    应用程序权限设计-权限的控制程度不同的设计方案

    **应用场景**:适用于需要对具体资源实例进行精细权限控制的应用场景,如内容管理系统中对频道的权限控制。 #### 七、涉及资源,权限和规则的权限设计 **概念**:在这种设计中,通过定义规则来自动确定用户对资源...

    小议数据级权限管理

    数据级权限管理是信息系统安全领域中的一个重要组成部分,其核心目的是为了在应用系统中对不同用户的访问权限进行精确控制,从而确保数据的安全性和业务系统的稳定运行。在实际操作过程中,数据级权限管理需要与业务...

    一种基于树型结构的BS系统权限控制方法

    这一方法的推广和应用,有望成为未来BS架构权限控制系统设计的新趋势。 总之,基于树型结构的BS系统权限控制方法,以其独特的设计理念和高效的管理方式,在提升系统安全性的同时,也促进了权限管理领域的创新发展。...

    疫情数据管理系统,数据可视化+数据管理+权限管理,可用于毕业设计.zip

    综上所述,“疫情数据管理系统”是一个集数据管理、可视化和权限控制于一体的实用系统,充分体现了JavaScript在现代信息技术中的应用。通过这个项目,学生可以深入学习和掌握Web开发的各个环节,同时对疫情数据分析...

    系统权限控制(用户/部门/角色),目前主要服务于单表操作,新闻,消息

    在IT行业中,系统权限控制是确保信息安全和数据保护的关键组成部分。在给定的标题和描述中,我们可以看到这个系统主要用于管理用户、部门和角色的权限,特别针对单表操作,如新闻和消息的管理。这涉及到数据库管理和...

    权限管理系统3

    在本系统中,每个角色可以被赋予不同的权限,这些权限对应于系统的各个功能模块。例如,一个“管理员”角色可能拥有所有权限,而“普通用户”角色则只有有限的读取权限。 此外,系统可能还包含了角色管理功能,允许...

    权限控制demo

    在IT行业中,权限控制是构建安全、稳定系统的关键部分,特别是在Web应用中。"权限控制Demo"是一个典型的示例,它展示了如何实现对用户操作的精细化管理,特别是针对按钮的控制。这种控制允许我们根据用户的角色和...

    rpac后台权限管理系统

    标签突出了系统的重点特性,即它是针对后台管理的,并且着重于权限控制。后台管理系统往往包括用户管理、角色分配、权限设置、操作日志记录等功能,以满足企业的各种管理需求。 **子文件名:“权限管理”** 这部分...

    android获取应用程序的权限列表

    本文将详细讲解如何在Android系统中获取应用程序的权限列表,并针对日志记录中使用的"jishen" TAG进行讨论。 1. **权限模型概述** Android的权限模型基于声明式权限,开发者在应用的AndroidManifest.xml文件中声明...

    权限控制系统(可用于二次开发)

    权限控制系统是软件开发中的一个重要组成部分,它主要用于控制不同用户或角色对系统资源的访问权限,以确保系统的安全性和数据的完整性。在这个名为"LimitSys"的压缩包中,我们可以推测包含了一个自定义开发的权限...

    MaticsoftFramework动软权限控制

    MaticsoftFramework的权限控制还涉及到数据权限,这是对数据级别的访问控制。例如,一个用户可能只能看到属于他自己的数据记录,而不能查看其他人的。这种细粒度的数据权限控制,使得敏感信息得到有效的保护,避免了...

    PDMS 访问控制权限

    PDMS(Plant Design Management System)是一种广泛应用于工程设计领域的软件系统,主要用于工艺流程、管道设计以及工厂布局等。PDMS的访问控制权限是指对于在PDMS环境下工作的设计人员,系统根据不同的需求设定不同...

    通用权限管理系统源码

    5. **权限管理**:定义并管理系统的各种权限,可能包括操作权限、数据权限等,可以设置为全局或特定于角色。 6. **API接口**:为了与其他系统集成,可能包含RESTful API设计,供外部系统调用获取或更新权限信息。 ...

    JEECG 数据权限自定义SQL表达式用法说明

    本文针对JEECGBPM这一业务流程管理平台,详细介绍了如何利用自定义SQL表达式实现数据权限的控制。JEECG(JavaEE Code Generation Platform)是一个代码生成器,可以用来快速搭建企业级的应用框架。其BPM模块是专门...

    Vue权限控制.pdf

    在当前的Web系统开发中,权限控制是一个基础而又重要的组成部分,它涉及到了数据安全与操作授权的问题。长期以来,Web系统的权限控制都集中在后端,这是因为后端直接与数据库打交道,是数据的直接管理者。然而随着...

    spring+hibernate 角色权限系统

    在"spring+hibernate 角色权限系统"中,JUnit用于编写针对各个模块的测试,确保系统功能的正确实现和持续维护。 综上所述,"spring+hibernate 角色权限系统"是一个集成了多种关键技术的企业级应用解决方案,它利用...

Global site tag (gtag.js) - Google Analytics