前言

RBAC(Role-Based Access Control),基于角色的访问控制,现在主流的权限管理系统的权限设计都是 RBAC 模型,或者是 RBAC 模型的变形。

我们需要思考一个问题:为什么要做权限的管理?

我的理解是在每一个系统中,每个用户所拥有的权限是不一样的,例如一个数据表,管理员可以修改、增加、查看等操作,而普通用户只能查看。所以如何进行用户权限的设计,就是我们需要考虑的问题了。


RBAC 模型是什么

RBAC(Role-Based Access Control),基于角色的访问控制。通过用户关联角色,角色关联权限,来间接的为用户赋予权限。

有一个问题需要我们思考:为什么要增加角色这一层关系呢?我直接用户关联权限不就行了?

假如有一些用户具有相同的权限,增加时需要为这些用户增加相同的权限,修改时同样也要修改相应的权限。如果有了角色,我们就可以直接将这些用户与同一个角色相对应。增加时只需要为用户绑定角色就行,修改时只需要修改这一个角色就行。

其实我的理解,最重要的是和现实生活相对应。比如学校,每个人(用户)都有不同的身份(角色),并且都有不同的权限。就举个例子吧,比如说一个老师,他不仅仅是老师,还是副院长,所以我们可以为他关联老师、副院长这两个角色,但他不是副院长的时候,升到院长了,我们就可以把副院长这个角色给取消关联,把院长这个角色为他关联上。公司也是同理,这样操作是不是感觉非常的舒服(可以想象一下没有角色应该怎样实现,一对比就懂得 RBAC 模型的好处了)。

其实这就是加一层的思想,就像 Java 中操作数据库,JDBC 不就是加的那一层,我们只需要面对 JDBC 就行了;还有集群做流量分发、负载均衡的时候,网关、Nginx 不就是加的那一层;同理 角色 也是加的那一层。

可以去了解一下 Linux 的权限管理!


RBAC 模型的分类

RBAC0 模型

最简单的用户、角色、权限模型。这里面包含两种:

  1. 用户和角色是多对一关系。即:一个用户只对应一个角色,一个角色可以对应多个用户。
  2. 用户和角色是多对多关系。即:一个用户可以对应多个角色,一个角色可以对应多个用户。

如果系统功能比较单一,使用人员较少,岗位权限相对清晰且确保不会出现兼岗的情况,此时可以考虑用多对一的权限体系。其余情况尽量使用多对多的权限体系,保证系统的可扩展性。如:张三既是行政,也负责财务工作,那张三就同时拥有行政和财务两个角色的权限。


RBAC1 模型

RBAC0 的基础上引入了角色继承的概念。即:子角色可以继承父角色的所有权限。

使用场景:如某个业务部门,有经理、主管、专员。主管的权限不能大于经理,专员的权限不能大于主管,如果采用 RBAC0 模型做权限系统,极可能出现分配权限失误,最终出现主管拥有经理都没有的权限的情况。

RBAC1 模型就很好解决了这个问题,创建完经理角色并配置好权限后,主管角色的权限继承经理角色的权限,并且支持在经理权限上删减主管权限


RBAC2 模型

基于 RBAC0 模型,增加了对角色的一些限制:角色互斥、基数约束、先决条件角色等。

  • 角色互斥:同一用户不能分配到一组互斥角色集合中的多个角色,互斥角色是指权限互相制约的两个角色。案例:财务系统中一个用户不能同时被指派给会计角色和审计员角色。
  • 基数约束:一个角色被分配的用户数量受限,它指的是有多少用户能拥有这个角色。例如:一个角色专门为公司 CEO 创建的,那这个角色的数量是有限的。
  • 先决条件角色:指要想获得较高的权限,要首先拥有低一级的权限。例如:先有副总经理权限,才能有总经理权限。
  • 运行时互斥:例如,允许一个用户具有两个角色的成员资格,但在运行中不可同时激活这两个角色。

RBAC3 模型

称为统一模型,它包含了 RBAC1RBAC2,利用传递性,也把 RBAC0 包括在内,综合了 RBAC0RBAC1RBAC2 的所有特点,这里就不再多描述了。


什么是权限

权限是资源的集合,这里的资源指的是软件中所有的内容,包括模块、菜单、页面、字段、操作功能(增删改查)等等。具体的权限配置上,目前形式多种多样,按照我个人的理解,可以将权限分为:页面权限、操作权限和数据权限

页面权限:所有系统都是由一个个的页面组成,页面再组成模块,用户是否能看到这个页面的菜单、是否能进入这个页面就称为页面权限。

操作权限:用户凡是在操作系统中的任何动作、交互都是操作权限,如增删改查等。

数据权限:一般业务管理系统,都有数据私密性的要求:哪些人可以看到哪些数据,不可以看到哪些数据。比如京东广东地区的负责人,他可以看到广东地区的仓库信息,但他看不到北京地区的仓库信息,因为这不是他的数据权限范围。


用户组

当平台用户基数增大,角色类型增多时,如果直接给用户配角色,管理员的工作量就会很大。这时候我们可以引入一个概念“用户组”,就是将相同属性的用户归类到一起。

例如:加入用户组的概念后,可以将部门看做一个用户组,再给这个部门直接赋予角色(1万员工部门可能就几十个),使部门拥有部门权限,这样这个部门的所有用户都有了部门权限,而不需要为每一个用户再单独指定角色,极大的减少了分配权限的工作量。

同时,也可以为特定的用户指定角色,这样用户除了拥有所属用户组的所有权限外,还拥有自身特定的权限。

用户组的优点,除了减少工作量,还有更便于理解、增加多级管理关系等。如:我们在进行组织机构配置的时候,除了加入部门,还可以加入科室、岗位等层级,来为用户组内部成员的权限进行等级上的区分。

除了减少工作量,还有更便于理解。比如按部门建立用户组的例子。一位用户从A部门异动到了B部门,这是实际发生的情况。如果没有用户组,那么我们要拿掉A部门的所有角色,换上B部门的所有角色。这种操作的本质没有区别,但是与实际情况的表现形式就有些差别了,不容易理解。加上用户组之后,只需要操作用户离开A组而加入B组就行了。这与实际情况很贴近。


项目参考

这是一个网上很出名的一个开源项目,和我并无关系!

若依权限管理系统

演示图片:

什么是 RBAC 模型?相关推荐

  1. 基于RBAC模型的通用权限管理系统的设计(数据模型)的扩展

    1 RBAC模型        访问控制是针对越权使用资源的防御措施.基本目标是为了限制访问主体(用户.进程.服务等)对访问客体(文件.系统等)的访问权限,从而使计算机系统在合法范围内使用:决定用户能 ...

  2. RBAC模型:设计思路

    RBAC模型 什么是RBAC RBAC(全称:Role-Based Access Control)基于角色的权限访问控制,作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在RBAC ...

  3. 参数化的RBAC模型

    1 动机 基于角色的访问控制(RBAC)模型被普遍认为是一种有效的访问控制模型,它比传统的自主访问控制(DAC)和强制访问控制(MAC)具有更高的灵活性和更好的扩展性. 在实际应用中,随着企业规模以及 ...

  4. 基于RBAC模型的通用企业权限管理系统

    1. 为什么我们需要基于RBAC模型的通用企业权限管理系统 管理信息系统是一个复杂的人机交互系统,其中每个具体环节都可能受到安全威胁.构建强健的权限管理系统,保证管理信息系统的安全性是十分重要的.权限 ...

  5. 会话管理 轻量php框架_SpringSecurity+JWT权限管理训练营-1基于RBAC模型的权限管理系统...

    1.什么是权限管理系统? 权限管理是一个几乎所有后台系统的都会涉及的一个重要组成部分,可以说是后台项目的基本功,主要目的是对整个后台管理系统进行权限的控制,而针对的对象是员工,避免因权限控制缺失或操作 ...

  6. mysql 树形结构_结合RBAC模型讲解权限管理系统需求及表结构创建

    结合RBAC模型讲解权限管理系统需求及表结构创建 在本号之前的文章中,已经为大家介绍了很多关于Spring Security的使用方法,也介绍了RBAC的基于角色权限控制模型.但是很多朋友虽然已经理解 ...

  7. 权限系统设计方案 RBAC模型

    文章目录 1.权限模型 1.1 权限设计 1.2 为什么需要角色 1.3 权限模型的演进 1.3.1 RBAC模型 1.3.2 角色继承的RBAC模型 1.3.3 带约束的RBAC模型 1.4 用户划 ...

  8. 权限管理——RBAC模型总结

    权限管理,这是每个软件系统都会涉及到的,而且权限管理的需求本质往往都是一样,无在乎怎么的角色拥有怎样的权限,只要你充当了这个角色,你就拥有了这些功能. 举个简单例子:一个老师在学校教室她就拥有教书育人 ...

  9. gin框架学习-Casbin入门指南(ACL、RBAC、域内RBAC模型)

    目录 前言 一.Casbin概述 二.Casbin工作原理 三.Model语法 1.Request定义 2.Policy定义 3.Matcher定义 4.Policy effect定义 1)some( ...

  10. 权限系统设计及RBAC模型

    概述 对于一个企业级的平台或系统或站点,权限模块或系统是必不可少的.权限管控,即权力限制,不同的人由于拥有不同权力,他所看到的.能使用的东西不一样.对应到一个应用系统,其实就是一个用户可能拥有不同的数 ...

最新文章

  1. 软件缺陷预测的两种定义
  2. CentOS下yum安装nginx服务
  3. JAVA 的读取Excel方法_纯Java的方式读取excel2007
  4. boost::mpl::distance相关的测试程序
  5. 【Java10】lambda表达式(函数式编程),Stream流,File类,字节/字符流,乱码,缓冲/转换/序列化/打印流,Properties
  6. FCOS: A Simple and Strong Anchor-free Object Detector
  7. kafka调试工具kafkacat的使用
  8. hadoop hive集群_Hive的优化和压缩
  9. oracle执行外部sql_增强的PolyBase SQL 2019-Oracle DB的外部表
  10. python 字典查找效率_Python字典查找性能,get-vs-in
  11. Scrapy中的Rules理解
  12. 即兴演讲的秘诀结构(一)
  13. DNS_PROBE_FINISHED_NXDOMAIN错误的解决方法
  14. iframe标签(页面嵌套)
  15. 曼谷这些旅游景点文化地标推荐
  16. 课程设计:汇编语言实现音乐播放器
  17. QA和QC,傻傻分不清?
  18. 以太网工业RFID读写器|读卡器CK-FR12-E01接线说明与PLC组网方案
  19. python归一化和反归一化_python:什么是归一化以及怎么做归一化?
  20. Vue详解及综合案例

热门文章

  1. 说出来你可能不信,现在连酒厂都在招算法工程师
  2. java jaxb 注解_一、JAXB注解的使用详解
  3. ARM 在Unity3D 中的美术优化解决方案 2, 几何体
  4. DXP三种网络去除方式的区别
  5. 健迷笑脸墙之Wakin-1(Powered by Smile Wall v1.0)
  6. python 并发下载器
  7. 手写MyBatis分页插件
  8. 源码方式安装的nginx注册到systemctl管理
  9. KaliLinux钓鱼Wifi搭建
  10. android异常Unable to instantiate activity ComponentInfo解决方法