RBAC权限管理

2023-11-10

RBAC权限管理

RBAC应用最为广泛的权限管理模型,核心的三要素是:用户、角色、权限,但并不仅仅局限于这三个核心要素,基于企业规模、用户规模、运维复杂度,RBCA其实是有很多的变种。从理论角度,有所谓的RBAC0、RBAC1、RBAC2、RBAC3等变种。

1、RBAC模型

1.1、传统权限模型

 用户直接分配权限,每一个用户都需要勾选账号对应的每一个权限,当用户的权限都相同时都需要做重复的工作,也做不到批量修改用户权限,可见非常繁琐,维护起来非常麻烦。

1.2、什么是RBAC模型

RBAC增加了“角色”的概念,我们首先把权限赋予角色,再把角色赋予用户。这样,由于增加了角色,授权会更加灵活方便。RBAC把权限体系抽象成三个实体:用户、角色、资源(权限的抽象)。三个实体之间的关系如下:

 

也就是说,角色实际上是人与资源之间的中间桥梁,人可以通过拥有某个角色来获得该角色下的所有权限。如下所示:

 

举例:

         如上图,如果按传统权限模型,给每一个用户赋予权限则会非常麻烦,并且做不到批量修改用户权限。这时候,可以抽象出几个角色,譬如普通员工、财务、采购等,然后把权限分配给这些角色,再把角色赋予用户。这样无论是分配权限还是以后的修改权限,只需要修改用户和角色的关系,或角色和权限的关系即可,更加灵活方便。此外,如果一个用户有多个角色,譬如王先生既负责财务和采购,那么可以给王先生赋予两个角色,即财务角色+采购角色,这样他就拥有这两个角色的所有权限。

当用户的工作内容发生变化时,如上图林总职务变更(从采购总监变更为财务总监),只需要重新绑定用户关联的角色,而不用一一删除该用户的权限再添加权限。

2、RBAC0 模型

RBAC0是RBAC系列模型中的基础模型,随后的RBAC系列模型都将按照RBAC0基础模型进行改进。用户与角色的关系有两种设计,如下:

2.1 用户与角色多对一(一个用户只对应一个角色)

1、创建用户的时候选择角色,如下图:

 

2、表设计图:

 

 优点:设计简单

缺点:

  1. 用户的创建依赖角色,即要先创建好角色后再创建用户
  2. 当一个用户同时拥有两个角色时,会使角色膨胀,如:

系统中有“人事”、“财务”、“经理”等角色,如张三同时兼职人事经理和财务经理,此时只能创建个新角色“人事&财务”来包含对应的操作权限。

2.2 用户与角色多对多(推荐设计)

1、创建用户:

 

2、创建角色:

 

3、建立用户与角色的关联关系:

 

表设计图:

 

 

优点:

1、用户创建不依赖于角色,用户与角色之间的关系单独维护。

         2、当一个用户同时拥有多个角色对应的权限时,只需要把用户绑定到对应的多个角色,

不需要重新定义新角色来绑定。

缺点:

  1. 用户膨胀:当用户量大时,为每个用户进行角色绑定维护起来麻烦。(引入用户组)
  2. 权限膨胀:当权限膨胀时,为每个角色绑定权限维护起来麻烦。(引入权限组)

3、RBAC1模型(角色继承)

RBAC1,基于RBAC0的优化,增加了角色的分层(即:子角色),子角色可以继承父角色的所有权限;角色继承的RBAC模型的思路是上层角色继承下层角色的所有权限,并且可以额外拥有其他权限。

 

举例:

视频网站,付费会员角色继承普通会员角色,那么付费会员除了普通会员的权限外还具备浏览付费内容的权限。

4、RBAC2模型(角色约束)

RBAC2引入了角色互斥、基数约束、先决条件约束。角色互斥,一个用户能拥有角色A,就不能拥有角色B,角色A和角色B是互斥的。也可以是权限互斥,权限A和权限B不能在一个角色里。

基数约束,一个角色被分配的用户数量有限;一个用户拥有的角色数量有限;一个角色被分配的权限数量有限;以便控制高级权限在系统中的分配;

先决条件约束,想获得某个上级角色,必须先拥有下级角色。

 

举例:

1、一个人不能既是裁判,又是运动员;

2、譬如给一个用户分配了财务经理的角色,就不能给他再赋予审计经理的角色了,否则他即可以录入账单又能自己审核账单;

3、有些公司对角色的升级十分看重,一个财务员工要想升级到财务经理,必须先升级到财务主管,这时候就要采用先决条件限制了。

5、RBAC3模型

RBAC3基于RBAC0,将RBAC1RABC2进行了整合,是最全面的权限设计模型。其中涉及到的概念有用户组、组织、职位。
 

1、用户组平台用户多,角色类型增多,有一部分人具有相同的属性。比如生产部的所有员工等,如果直接给这些用户分配角色,就会增加管理员的工作量。如果给这些用户分组,并给用户组分配角色,用户组里的每个用户都具有用户组下的角色。如果用户退出用户组,就撤销用户组下的角色,这样就大大减少了管理员的工作量,无需管理员手动管理角色。用户组又分为具有上下级关系的用户组、普通用户组。具有上下级关系的用户组,和部门、职位关联起来。按照部门和职位对用户进行分组。普通用户组,没有上下级没关系,和部门职位也没有关系。纯粹地对用户进行分组。

2. 组织对于组织结构复杂的公司,可以把组织架构和角色关联起来。一旦把某个人加入某个组织,该用户就会拥有该组织下的所有角色。

3、职位每个部门下有很多职位,职位不同,职位的权限也不同。把职位和角色关联起来,一旦赋予某人某个职位,该用户就会拥有该职位下的所有角色。特殊情况下,一个人可以拥有多个职位。

 

在实际开发中,根据不同的业务需求,会有各种各样的演变,业务逻辑复杂的,权限系统也复杂,想要做出通用全面且高效的权限模型,还是非常不容易的。现在就把用户组、组织、职位、角色互斥、基数约束汇总起来画个草图。

 

6、总结

权限模块是一个系统中最基础也是非常重要的一个模块。要考虑角色继承就使用RBAC1模型,要考虑角色互斥、基数约束、先决条件约束就使用RBAC2模型。中小型公司使用RBAC0模型就足以使用,超大型的公司再考虑RBAC3设计模型,也可以根据实际的业务需要进行适当的裁剪。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RBAC权限管理 的相关文章

随机推荐

  • Java 基于文本界面的《员工管理系统》

    一 代码实现 1 设计分析 该管理系统使用了5个包 Package 类似于文件夹 1 bean 包含员工类 Employee 2 main 主程序的入口 3 service 主要是 业务逻辑层 的功能实现 4 util 存放工具类 此处存放
  • 【springmvc系】利用RequestBodyAdviceAdapter做接口鉴权

    需求 有个简单的需求 对于第三方接口我们需要做个简单的鉴权机制 这边使用的是非对称性加密的机制 我们提供三方公钥 他们通过公钥对接口json报文使用加密后的报文请求 我们通过对接收过来的请求某一个加密报文字段来进行RSA解密校验 考虑到日后
  • hashmap原理_HashMap原理jdk7和jdk8的区别

    一 hashMap的jdk1 7和jdk1 8区别 1 实现方式 jdk7中使用数组 链表来实现 jdk8使用的数组 链表 红黑树 2 新节点插入到链表是的插入顺序不同 jdk7插入在头部 jdk8插入在尾部jdk7中 如何在头部插入 看a
  • [Hadoop3.3.1]:Unable to load native hadoop library for your platform

    需求 linux已经启动了hadoop集群 想要在windows中用java对文件进行下载操作 错误提示 找不到winutils exe hadoop dll没有设置原因 Hadoop访问windows本地文件系统 要求Windows上的本
  • SQL Server数据库进阶

    批处理 将多条SQL语句作为一个整体去编译 生成一个执行计划 然后执行 为了将一个脚本分为多个批处理 可使用GO语句 GO语句的特点 GO语句必须自成一行 只有注释可以在同一行上 它使得自脚本的开始部分或者最近一个GO语句以后的所有语句编译
  • elementUI中,实现一个单元格内显示两行数据,并用其中一个数据进行排序。

    最近在公司中 有这样一个需求 表格中 一个单元格里面显示两行数据 并且可以使用其中一行进行排序 其中数据的样式也要实时变动 类似于下图 这样的话 elementUI中自带的prop就不适合了 所以 需要展示两行数据的地方 我们就用插槽来解决
  • 重叠社区发现-UEOC算法(unfold and extract overlapping communities)学习笔记

    本文提出了一种基于马尔可夫动力学模型的发现节点共享社区的算法UEOC 在UEOC方法中 为了检测出所有的自然群落 将马尔可夫随机游动方法与一种新的约束策略相结合 该策略基于相应的退火网络 21 用于展开每个群落 然后 利用一个借助电导的截止
  • 【Python编程入门】环境搭建

    作为一门跨平台的高级编程语言 Python可以运行在几乎所有主流的操作系统中 这也意味着 只要我们在本机电脑安装配置完Python环境后 便可以轻松愉快的学习Python语言了 这是一门值得大部分人学习的计算机编程语言知识 关于Python
  • angular自定义form表单元素-checkList

    实际使用form的时候 最外层的form的某个表单元素可能是个组合的 这种情况如果是可多场景复用的 最好封装一个表单元素 本文以组合复选框为例来说明下自定义表单元素的过程 实现效果 展示效果 html
  • TeamViewer三种许可证的区别是什么?

    很多想要购买TeamViewer正版许可证的用户 不清楚这三种许可证的区别 所以今天小编就为大家介绍一下 这三种许可证到底有何区别以及购买那种最划算 首先为大家介绍一下TeamViewer Business商业版许可证 如下图所示 图1 B
  • 汇编语言基础知识

    文章目录 80386常用寄存器 一 常用寄存器 1 1 通用寄存器 1 2 段寄存器 1 3 程序状态与控制寄存器 二 常用基本指令 2 1 数据传送指令 2 2 算术运算指令 2 2 1 加法指令 2 2 2 减法指令 2 2 3 乘法指
  • 查看使用systemctl启动日志

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 查看启动日志 journalctl f或者 journalctl xe 2 设置开机自启动 systemctl enable nginx service 3 启动ngi
  • 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java制造类企业erp23725

    面对老师五花八门的设计要求 首先自己要明确好自己的题目方向 并且与老师多多沟通 用什么编程语言 使用到什么数据库 确定好了 在开始着手毕业设计 1 选择课题的第一选择就是尽量选择指导老师擅长的课题 其实说白一点 你们的指导老师每年都是那几个
  • C3P0连接池参数配置

  • Linux系统wget unable to resolve host address解决办法

    Linux系统运行yum安装rpm包的时候提示wget unable to resolve host addresswget 无法解析主机地址 这就能看出是DNS解析的问题 错误提示 wget unable to resolve host
  • 用于CTF(MISC)的kali虚拟机更改过程记录

    Kali更改记录 安装pip2 太多工具需要python2了 安装setuptools 18 5 wget https pypi python org packages source s setuptools setuptools 18 5
  • 面向对象的编程思想和Python的继承和多态,特殊方法,引用计数

    面向对象的编程思想和Python的类 访问和属性 继承 在上一文中我们了解到了 私有的属性的访问方式 实例名 类名 私有属性名 一 私有的属性如何对外提供公有的取值和赋值方法呢 提供公有的方法作为接口进行取值 例如 class Avg Sc
  • 思科路由器NAT配置详解(转)

    思科路由器NAT配置详解 转 网络技术 2010 07 11 17 48 14 阅读104 评论0 字号 大中小 订阅
  • ubuntu安装vscode_vscode远程开发配置

    Remote development是一个支持vscode远程开发的插件 非常方便在windows下调试远程linux系统上的代码 使用配置方式如下 首先windows和远端服务器都要安装ssh windows上启用ssh服务即可 linu
  • RBAC权限管理

    RBAC权限管理 RBAC应用最为广泛的权限管理模型 核心的三要素是 用户 角色 权限 但并不仅仅局限于这三个核心要素 基于企业规模 用户规模 运维复杂度 RBCA其实是有很多的变种 从理论角度 有所谓的RBAC0 RBAC1 RBAC2