RBAC权限模型及数据权限扩展的实践
话说大家对RBAC权限模型应该是耳熟能详了。但真正用的好的并不多。并且原始的RBAC模型并不包括数据权限的管理,网上也差点儿没有相关的文章可以參考。本人经过几个项目的实战,在其基础上扩展出一套可行的、简单的数据权限模型,希望可以帮助大家解决数据权限管理上的老大难问题。
至于什么是数据权限,请移步我的其它文章,这里不再敷述。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVhbmJn/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
1、关于角色的继承:
在上图描写叙述的模型中,并没有实现角色的继承。既然一个用户能够分配多个角色,那么角色是否能继承还有什么必要呢?实现这个毫无必要的功能须要大大添加应用的复杂度,可谓是得不偿失。
2、关于资源和功能:
大家能够从图中看到仅仅有一张表的一个字段用来描写叙述资源或功能的授权。在大多数场景中,资源和功能实际上无法进行严格的区分。有所差别的仅仅是颗粒度的不同而已。一个业务组能够算是一种颗粒度最粗的资源。一个页面或窗口相对就精细一些了;到页面内菜单、工具栏button,就更精细了。假设控制的颗粒度达到页面元素或界面控件的程度,就是最细颗粒度的权限控制了。所以不管你叫资源还是功能、操作。都没有差别。你要控制的就是那些东西,仅仅须要你描写叙述出来,就能够被控制。
3、关于数据权限:
数据权限的授权相对功能权限来说,是全然不同的两种类型。怎样为数据授权,这必须从数据权限的本质出发,从怎样鉴别数据出发,仅仅有可以像鉴别资源一样对数据加以鉴别,我们才干对数据进行正确的授权。
假设我们抛开数据值的不同(值的不同不是本质的不同)来分析数据,就会发如今一般场景中,数据的不同首先是业务类型的不同。譬如:订单数据、结算数据、生产计划数据等等。
对于同一类型数据,还能够以产生数据的对象:业务部门、业务人员加以区分。这也是常常遇到的需求:经理能够看到所有的订单,业务员仅仅能看自己的。
什么叫所有?什么叫自己的?前一个概念对于不同的业务部门,实际的内容往往并不相同。A经理的所有订单指的是A部门的订单;而B经理的所有订单则是B部门的订单。
至于所谓的“自己的”。就更加明显是一个相对概念了。张三的和李四的一般来说是不存在交集的。但有时候。也有一些绝对性的需求。譬如要求C部门的张三要管A部门订单的审核,相同C部门的王五则负责B部门。
这样,数据权限的授权必需要从相对和绝对两个维度进行定义,才干做到逻辑完备。所以模型中也通过两张表来描写叙述数据权限,在相对模式中,用Mode字段来描写叙述不同的颗粒度,而在绝对模式中用户能够直接指定部门或用户的ID。此外,用ModuleId字段来定义数据的类型,也就是产生业务的模块。这个字段所包括的逻辑不仅是差别数据的业务类型,更重要的是为应用数据权限提供根据。
4、关于权限的应用:
本人在项目中,功能权限和数据权限都应用在数据訪问层。利用数据库函数返回给应用程序被授权的资源或功能的ID集合。
应用程序依据ID集合通过反射载入资源或功能,达到用户不能訪问非授权资源的目的。数据权限的应用方法也差点儿相同,将数据库函数join到业务表上去,未授权的业务数据就会被过滤掉。通过join添加的Permission列,则描写叙述了该行数据的读写权限为仅仅读还是读写。
RBAC权限模型及数据权限扩展的实践的更多相关文章
- RBAC权限模型——项目实战(转)
一.前言 权限一句话来理解就是对资源的控制,对web应用来说就是对url的控制,关于权限可以毫不客气的说几乎每个系统都会包含,只不过不同系统关于权限的应用复杂程序不一样而已,现在我们在用的权限模型基本 ...
- (转)RBAC权限模型——项目实战
一.前言 权限一句话来理解就是对资源的控制,对web应用来说就是对url的控制,关于权限可以毫不客气的说几乎每个系统都会包含,只不过不同系统关于权限的应用复杂程序不一样而已,现在我们在用的权限模型基本 ...
- SpringCloud微服务实战——搭建企业级开发框架(二十八):扩展MybatisPlus插件DataPermissionInterceptor实现数据权限控制
一套完整的系统权限需要支持功能权限和数据权限,前面介绍了系统通过RBAC的权限模型来实现功能的权限控制,这里我们来介绍,通过扩展Mybatis-Plus的插件DataPermissionInterce ...
- Salesforce的数据权限机制
本文主要介绍了 Salesforce 对于系统中数据的访问控制是如何设计的,然后也了解了下 Alfresco 和 Oracle VPD 的数据权限机制.希望对一些业务系统的数据权限的访问控制设计能有所 ...
- Smartbi权限安全管理系统_保障数据权限安全
思迈特软件Smartbi具有完善的安全管理体系,Smartbi权限安全管理系统它可以控制用户功能权限.数据访问权限.资源访问权限.Smartbi权限安全管理系统支持按用户.用户组.角色进行管理:支持多 ...
- [七年技术总结系列][理论篇]-RBAC权限模型由浅入深
权限部分将分两章介绍,第一章由浅入深介绍权限理论知识及应用,第二章介绍具体实现.后期再讲述中间件的使用时,还会插入一些权限内容,本质上属于中间件的应用. 权限模块是业务系统最常见.最基本的子集.本章假 ...
- SpringCloud微服务实战——搭建企业级开发框架(二十一):基于RBAC模型的系统权限设计
RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来间接地赋予用户权限,从而达到用户和权限解耦的目的. R ...
- RBAC 几种常见的控制权限模型
1. 几种常见的权限模型 2. ACL 和 RBAC 对比 3. RBAC 权限模型的优势 (1)简化了用户和权限的关系 (2).易于扩展 易于维护 4.优势(给权限和收回权限) 5.架构
- 权限管理系统(四):RBAC权限模型分类介绍
RBAC是Role-BasedAccess Control的英文缩写,意思是基于角色的访问控制.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构 ...
随机推荐
- pm2 相关命令
pm2 相关命令 转载 2017年02月18日 22:59:48 二.安装 Linux Binaries下载地址:https://nodejs.org/dist cd oneinstack/src ...
- redis的主从配置 扩容
由于redis的集群功能没有完全编写好,见:http://redis.io/topics/cluster-spec 集群只有测试版的第8个版本redis3.0.0 见 http://redis.io/ ...
- 使用Vue.js制作仿Metronic高级表格(一)静态设计
Metronic高级表格是Metonic框架中自行实现的表格,其底层是Datatables.本教程将主要使用Vue实现交互部分,使用Bootstrap做样式库.jQuery做部分用户交互(弹窗). 使 ...
- 使用maven的profile切换项目各环境的参数
Java后端开发经常需要面对管理多套环境,一般有三种环境:开发,测试,生产. 各个环境之间的参数各不相同,比如MySQL.Redis等不同环境的host不一样,若每个环境都手动替换环境很容易出错,Ma ...
- XML 简单介绍
先附上一张XML 大概图:详解见博客内容. 一.定义 XML(EXtensible Markup Language) :可扩展标记语言. 设计的用途:用来描述,存储,传输数据信息. 二.特色 1.单纯 ...
- 一些LR的经验,讲的还不错
https://blog.csdn.net/Dinosoft/article/details/50492309 记录一下.
- Computer Generated Angular Fisheye Projections [转]
Computer GeneratedAngular Fisheye Projections Written by Paul Bourke May 2001 There are two main ide ...
- java 中 SVN 设置所有文件及子目录 needs-lock, svn 提交时自动设置 needs-lock, 及版本不一致问题
摘自: http://my.oschina.net/zhangzhihao/blog/72177 设置后的效果:文件会自动带上svn:needs-lock属性,默认是只读的要签出才能修改以防止修改完后 ...
- php--session垃圾回收机制
在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾.PHP会将其在内存中销毁:这是PHP的GC垃圾处理机制,防止内存溢出. GC的工作就是扫描所有的Session信息,用当前时间减去sessi ...
- 成都PHP开发project师薪资信息
这是成都的PHPproject开发师招聘.如图所见,最低的月薪是4K,最高的是35W,PHP开发工程师正处于炙手可热的发展趋势,还愁拿不到高薪,找不到工作的你,还犹豫什么,机会就在眼前,成都传智播客P ...