基于RBAC模型的权限设计:如何设计系统权限体系?
一、什么是RABC
RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念。取消了用户和权限的直接关联,改为通过用户关联角色、角色关联权限的方法来间接地赋予用户权限(如下图),从而达到用户和权限解耦的目的。

RABC的好处
- 职能划分更谨慎。对于角色的权限调整不仅仅只影响单个用户,而是会影响关联此角色的所有用户,管理员下发/回收权限会更为谨慎;
- 便于权限管理。对于批量的用户权限调整,只需调整用户关联的角色权限即可,无需对每一个用户都进行权限调整,既大幅提升权限调整的效率,又降低漏调权限的概率;
在不断的发展过程中,RBAC也因不同的需求而演化出了不同的版本,目前主要有以下几个版本:
- RBAC0,这是RBAC的初始形态,也是最原始、最简单的RBAC版本;
- RBAC1,基于RBAC0的优化,增加了角色的分层(即:子角色),子角色可以继承父角色的所有权限;
- RBAC2,基于RBAC0的另一种优化,增加了对角色的一些限制:角色互斥、角色容量等;
- RBAC3,最复杂也是最全面的RBAC模型,它在RBAC0的基础上,将RBAC1和RBAC2中的优化部分进行了整合;
二、基于RBAC的几种权限体系设计
1、用户-角色-权限
这种权限体系其实就是RBAC0的模式了。这里面又包含了2种:
- 用户和角色是多对一关系,即:一个用户只充当一种角色,一种角色可以有多个用户担当;
- 用户和角色是多对多关系,即:一个用户可同时充当好几种角色,一种角色可以有多个用户担当;

如上图:对于左边的用户-角色对应,每个人只能同时拥有一种角色,但是同一个角色里边,可能会含有多个用户(如:李四和王麻子都是业务员);而右边的用户-角色对应,是在左边的基础上,增加了一个用户可拥有多种角色的情况(如:小马哥既是经理,也要负责财务的工作);
那么,什么时候该使用多对一的权限体系,什么时候又该使用多对多的权限体系呢?
我的建议是:尽量可能地使用多对多的权限体系。如果这个系统的功能比较单一、使用人员较少、岗位权限相对清晰且不会出现兼岗的情况,这种情况也可以考虑用多对一的权限体系。
2、用户-组织-角色-权限
一般公司的业务管理系统,都有数据私密性的要求:哪些人可以看到哪些数据,哪些人不可以看到哪些数据。这个时候,我们就需要把这些东西也考虑到你的权限体系内了。

假设上图是一家公司业务部门的组织架构图,公司要求你基于这个组织架构设计一个业务管理系统,并要求系统需要满足不同用户的数据私密性,比如:“张三”登录时,只能看到“张三”负责的数据;“张三”的领导登录时,能看到“团队A”的所有业务员负责的数据,但看不到其他团队业务员负责的数据等等。
在这种情况下,上一种权限体系就不适用了,但我们可以对其进行一些小改造后,即可达到数据管控的目的,如下图:

在“用户-角色-权限”的基础上,我们增加了用户与组织的关联关系,组织决定了用户的数据可视权限。但要想真正达到这个效果,我们还需要做2件事:
- 组织层级划分。如下图,我们需要对组织进行梳理,并划分层级;
- 数据可视权限规则制定。比如:上级组织职能看到下级组织员工负责的数据,而不能看到其他平级组织及其下级组织的员工数据等。
通过以上两点,系统就可以在用户登录时,自动判断要给用户展示哪些数据了!
3、用户-组织-岗位-角色-权限
第三种权限体系又是在第二种权限体系上进行优化的,增加了用户与岗位的关联关系,示意图如下:

增加岗位有以下几点好处:
- 识别用户的主要身份。一个人可能身兼多职(多个角色),但是他的主要职能是固定的,那怎么告诉系统用户的主要职能是什么呢?答案就是:通过岗位!拿上面的小马哥举例:小马哥虽然身兼经理和财务两种身份,但他的本职工作是“经理”,因此,他的系统岗位应该“经理”。当他登录时,系统会识别他的身份为“经理”,只不过这个“经理”刚好兼具了其他岗位的职能而已;
- 通过“组织-岗位”关联,快速甄别用户岗位。公司在不断地发展的过程中,系统的用户角色也会不断增加,当角色达到一定数量以后,管理员每新增一个用户都要花相当的时间去寻找角色。引入岗位后,可将组织和岗位、岗位和角色提前进行关联,配置账号时,管理员只要选定组织,系统就给出与该组织关联的岗位,而这些岗位,又是提前关联好角色的,选择起来,既方便又高效!
基于RBAC模型的权限设计:如何设计系统权限体系?的更多相关文章
- 基于RBAC模型的通用企业权限管理系统
1. 为什么我们需要基于RBAC模型的通用企业权限管理系统 管理信息系统是一个复杂的人机交互系统,其中每个具体环节都可能受到安全威胁.构建强健的权限管理系统,保证管理信息系统的安全性是十分重要的.权限 ...
- Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理
首先,白话一下RBAC模型.RBAC是基于角色的访问控制(Role-Based Access Control)的简称.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,wh ...
- 一种基于RBAC模型的动态访问控制改进方法
本发明涉及一种基于RBAC模型的动态访问控制改进方法,属于访问控制领域.对原有RBAC模型进行了权限的改进和约束条件的改进,具体为将权限分为静态权限和动态权限,其中静态权限是非工作流的权限,动态权限是 ...
- SpringCloud微服务实战——搭建企业级开发框架(二十一):基于RBAC模型的系统权限设计
RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来间接地赋予用户权限,从而达到用户和权限解耦的目的. R ...
- 基于RBAC模型的权限系统设计(Github开源项目)
RBAC(基于角色的访问控制):英文名称Rose base Access Controller.本博客介绍这种模型的权限系统设计.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来 ...
- 26、生鲜电商平台-RBAC系统权限的设计与架构
说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上分析实现的策略以及基于目前两种比较流行的权限设计思想 ...
- Java生鲜电商平台-RBAC系统权限的设计与架构
Java生鲜电商平台-RBAC系统权限的设计与架构 说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上 ...
- 权限系统与RBAC模型概述
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3793894.html ...
- 权限系统与RBAC模型概述[绝对经典]
0. 前言 一年前,我负责的一个项目中需要权限管理.当时凭着自己的逻辑设计出了一套权限管理模型,基本原理与RBAC非常相似,只是过于简陋.当时google了一些权限管理的资料,从中了解到早就有了RBA ...
随机推荐
- tensorflow keras analysis
目录 Q: where is Sequential defined? Q: where is compile()? tensorflow keras analysis code from keras. ...
- 支付宝小程序开发——H5跳转到小程序(获取小程序页面的链接)
前言: 这个问题支付宝小程序官方文档并没有专门说明,钉钉群的官方技术支持给了个开发者社区的帖子,详见:如何跳转小程序. 如果配置的页面没有参数还好,不会出问题,如果有参数,很可能配出来的链接无法正常获 ...
- 案例:执行 JavaScript 语句
隐藏百度图片 # coding=utf-8 from selenium import webdriver driver = webdriver.PhantomJS(executable_path=r' ...
- 使用 jpype 库实现 Python 调用 java 的 jar 包中的功能
一.what's the JPype JPype 是一个能够让 python 代码方便地调用 Java 代码的工具.在某些时候 java 的能力更强,我们可以用 java 写一个模块的功能然后用 Py ...
- 基于term vector深入探查数据
1.term vector介绍 获取document中的某个field内的各个term的统计信息 term information: term frequency in the field, term ...
- html的rowspan和colspan
https://www.jb51.net/article/165695.htm rowspan工具 https://blog.csdn.net/oxiaobaio/article/details/80 ...
- Python技术点
调试过程中遇到的问题,继上一篇博文! (1)爬取第一个页面之后名字链接页面存在分页情况 解决方案:根据子网页,选择合适的正则表达式,获取页面数,根据页面数自动生成换页URL (2)测试过程中某些网页数 ...
- Java操作fastDFS
一.加入Maven依赖 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs- ...
- 终端下更改printk打印级别
如何去更改printk的打印级别? 1.查看当前控制台的打印级别 # cat /proc/sys/kernel/printk 该文件有4个数字值,它们根据日志记录消息的重要性,定义将其发送到何处,上面 ...
- 防火墙阻止了虚拟机与主机之间互相ping通解决方案
1. 打开WIN10防火墙,选择高级设置 2.入站规则 3.找到配置文件类型为“公用”的“文件和打印共享(回显请求 – ICMPv4-In)”规则,设置为允许. 如果上面步骤没有问题还ping不通,可 ...