RBAC 模型 - 权限系统是如何进行架构设计的?
肖新宇,微医云服务团队前端工程师。喜欢游泳🏊♀️,健身。
大家在平时使用网页的时候,遇到和权限相关的场景应该很多,比如视频网站的会员视频,管理后台的访问控制,那么,本文将带大家了解一下,权限系统的通用设计模型理念,和如何设计一个简易的权限系统。
首先请大家思考🤔个问题,我们为什么需要权限系统?
…思考 10s
…思考 30s
…思考 50s
思考时间到了,我们来说下为什么需要权限系统👇。
大家可以看看我们平时使用的各种系统,不同的身份的人,在同一个场景下面所需要的功能是不一样的,比如我们的挂号网,患者登录进去需要看到的是挂号流程,医生登录进去需要的是看到待接诊的患者。这时就需要涉及到角色权限功能的分配。
接下来给大家介绍 RBAC 模型和权限系统的设计
一、什么是 RBAC 模型
RBAC(Role-Based Access Control)即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。
在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
如下图:
有的人可能会问,为什么需要使用角色来进行关联呢,之前权限绑定在用户上面不就好了。为啥还需要添加角色这个概念。
其实在简单的系统里面,每个用户只存在一种角色,那么可以直接用户绑定权限。但是对于比较大的系统,很多用户拥有相同的一批权限,这时,我们如果不引入角色的关联,那么每次都需要批量修改全部的用户权限。而且角色关联,很方便的可以针对于多用户多角色的场景。
二、RBAC 模型的分类
RBAC 模型可以分为:RBAC0、RBAC1、RBAC2、RBAC3 四种。其中 RBAC0 是基础,也是最简单的,相当于底层逻辑,RBAC1、RBAC2、RBAC3 都是以 RBAC0 为基础的升级。
一般情况下,使用 RBAC0 模型就可以满足常规的权限管理系统设计了。
2.1 RBAC0
最简单的用户、角色、权限模型。这里面又包含了 2 种:
用户和角色是多对一关系,即:一个用户只充当一种角色,一种角色可以有多个用户担当。 用户和角色是多对多关系,即:一个用户可同时充当多种角色,一种角色可以有多个用户担当。
2.2 RBAC1
相对于 RBAC0 模型,增加了子角色,引入了继承概念,即子角色可以继承父角色的所有权限。
2.3 RBAC2
角色互斥:同一用户不能分配到一组互斥角色集合中的多个角色,互斥角色是指权限互相制约的两个角色。案例:财务系统中一个用户不能同时被指派给会计角色和审计员角色。
基数约束:一个角色被分配的用户数量受限,它指的是有多少用户能拥有这个角色。例如:一个角色专门为公司 CEO 创建的,那这个角色的数量是有限的。先决条件角色:指要想获得较高的权限,要首先拥有低一级的权限。例如:先有副总经理权限,才能有总经理权限。
运行时互斥:例如,允许一个用户具有两个角色的成员资格,但在运行中不可同时激活这两个角色。
2.4 RBAC3
RBAC3,也就是最全面级的权限管理,被称为统一模型,它包含了 RBAC1 和 RBAC2,利用传递性,也把 RBAC0 包括在内,综合了 RBAC0、RBAC1 和 RBAC2 的所有特点 , 它是基于 RBAC0 的基础上,将 RBAC1 和 RBAC2 进行整合了,最全面,也最复杂的.
这种模式既要维护好角色间的继承关系处理好分层,又要处理角色间的责任分离。
三、RBAC 的特点
便于授权管理:RBAC 采用了角色继承的概念,它将角色组织起来,能够很自然地反映组织内部人员之间的职权、责任关系。
便于赋予最小权限原则:根据组织内的规章制度、职员的分工等设计拥有不同权限的角色,只有角色需要执行的操作才授权给角色,否则对操作的访问被拒绝。
便于职责分离:对于某些特定的操作集,某一个角色或用户不可能同时独立地完成所有这些操作,这时需要进行职责分离。有静态和动态两种实现方式。
RBAC 模型没有提供操作顺序控制机制:这一缺陷使得 RBAC 模型很难应用关于那些要求有严格操作次序的实体系统。
四、如何设计权限系统
上面我们已经介绍了权限系统的设计模型,那么又到了我们的思考环节,怎么利用 RBAC 去设计一个权限系统。
思考.....🤔
思考.....🤔
思考.....🤔
首先,我们思考一下一个简单的权限系统应该具备哪些内容?
通过我们前面对 RBAC 的介绍,RBAC 模型:用户-角色-权限。所以最基本的我们应该具备用户、角色、权限这三个内容。
那么如何定义用户,角色,和权限呢?
权限,对于我们的网页中,如页面,按钮,接口都可以当做权限。
角色,用于关联权限的,用来描述当前权限的使用者。
用户,这个就很简单了,使用我们系统的都是用户。
接下来,我们思考,究竟如何将三者关联起来。
回顾前文,角色作为枢纽,关联用户、权限。所以在 RBAC 模型下,我们应该:创建一个角色,并为这个角色赋予相应权限,最后将角色赋予用户。将这个问题抽象为流程,如下图
然后我们把上图映射到我们的系统里面
当医生登录时,只看得到医生门诊, 护士登录只看得到预约登记,他们都看不到其他用户的专属的页面,但是医院管理员可以看到全部的。
这样就实现了用户、权限、角色的关联,一个简易的权限系统就完成了。
本篇文章主要是工作中开发权限系统的总结,通过给大家介绍 RBAC 的模型和概念,让大家了解到 RBAC 的核心是通过角色管理权限,角色赋予用户来进行权限管理,让大家在设计权限系统设计时可以进行参考。