RBAC 模型 - 权限系统设计

RBAC 模型 - 权限系统设计

公众号「 微医大前端技术 」

肖新宇,微医云服务团队前端工程师。喜欢游泳🏊‍♀️,健身。

大家在平时使用网页的时候,遇到和权限相关的场景应该很多,比如视频网站的会员视频,管理后台的访问控制,那么,本文将带大家了解一下,权限系统的通用设计模型理念,和如何设计一个简易的权限系统。

首先请大家思考🤔个问题,我们为什么需要权限系统?

引导图

…思考 10s
…思考 30s
…思考 50s

思考时间到了,我们来说下为什么需要权限系统👇。

大家可以看看我们平时使用的各种系统,不同的身份的人,在同一个场景下面所需要的功能是不一样的,比如我们的挂号网,患者登录进去需要看到的是挂号流程,医生登录进去需要的是看到待接诊的患者。这时就需要涉及到角色权限功能的分配。

接下来给大家介绍 RBAC 模型和权限系统的设计

一、什么是 RBAC 模型

RBAC(Role-Based Access Control)即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。

在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。

如下图:

rbac 介绍图

有的人可能会问,为什么需要使用角色来进行关联呢,之前权限绑定在用户上面不就好了。为啥还需要添加角色这个概念。

其实在简单的系统里面,每个用户只存在一种角色,那么可以直接用户绑定权限。但是对于比较大的系统,很多用户拥有相同的一批权限,这时,我们如果不引入角色的关联,那么每次都需要批量修改全部的用户权限。而且角色关联,很方便的可以针对于多用户多角色的场景。

二、RBAC 模型的分类

RBAC 模型可以分为:RBAC0、RBAC1、RBAC2、RBAC3 四种。其中 RBAC0 是基础,也是最简单的,相当于底层逻辑,RBAC1、RBAC2、RBAC3 都是以 RBAC0 为基础的升级。

一般情况下,使用 RBAC0 模型就可以满足常规的权限管理系统设计了。

2.1 RBAC0

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

  1. 用户和角色是多对一关系,即:一个用户只充当一种角色,一种角色可以有多个用户担当。
  2. 用户和角色是多对多关系,即:一个用户可同时充当多种角色,一种角色可以有多个用户担当。

2.2 RBAC1

相对于 RBAC0 模型,增加了子角色,引入了继承概念,即子角色可以继承父角色的所有权限。

RBAC1

2.3 RBAC2

  1. 角色互斥:同一用户不能分配到一组互斥角色集合中的多个角色,互斥角色是指权限互相制约的两个角色。案例:财务系统中一个用户不能同时被指派给会计角色和审计员角色。

  2. 基数约束:一个角色被分配的用户数量受限,它指的是有多少用户能拥有这个角色。例如:一个角色专门为公司 CEO 创建的,那这个角色的数量是有限的。

先决条件角色:指要想获得较高的权限,要首先拥有低一级的权限。例如:先有副总经理权限,才能有总经理权限。 3. 运行时互斥:例如,允许一个用户具有两个角色的成员资格,但在运行中不可同时激活这两个角色。

2.4 RBAC3

RBAC3,也就是最全面级的权限管理,被称为统一模型,它包含了 RBAC1 和 RBAC2,利用传递性,也把 RBAC0 包括在内,综合了 RBAC0、RBAC1 和 RBAC2 的所有特点 , 它是基于 RBAC0 的基础上,将 RBAC1 和 RBAC2 进行整合了,最全面,也最复杂的.

这种模式既要维护好角色间的继承关系处理好分层,又要处理角色间的责任分离。

rbac3

三、RBAC 的特点

  1. 便于授权管理:RBAC 采用了角色继承的概念,它将角色组织起来,能够很自然地反映组织内部人员之间的职权、责任关系。

  2. 便于赋予最小权限原则:根据组织内的规章制度、职员的分工等设计拥有不同权限的角色,只有角色需要执行的操作才授权给角色,否则对操作的访问被拒绝。

  3. 便于职责分离:对于某些特定的操作集,某一个角色或用户不可能同时独立地完成所有这些操作,这时需要进行职责分离。有静态和动态两种实现方式。

  4. RBAC 模型没有提供操作顺序控制机制:这一缺陷使得 RBAC 模型很难应用关于那些要求有严格操作次序的实体系统。

四、如何设计权限系统

上面我们已经介绍了权限系统的设计模型,那么又到了我们的思考环节,怎么利用 RBAC 去设计一个权限系统。

思考.....🤔
思考.....🤔
思考.....🤔

首先,我们思考一下一个简单的权限系统应该具备哪些内容?

通过我们前面对 RBAC 的介绍,RBAC 模型:用户-角色-权限。所以最基本的我们应该具备用户、角色、权限这三个内容。

那么如何定义用户,角色,和权限呢?

  1. 权限,对于我们网页中,如页面,按钮,接口都可以当做权限。

  2. 角色,用于关联权限的,用来描述当前权限的使用者。

  3. 用户,这个就很简单了,使用我们系统的都是用户。

接下来,我们思考,究竟如何将三者关联起来。

回顾前文,角色作为枢纽,关联用户、权限。所以在 RBAC 模型下,我们应该:创建一个角色,并为这个角色赋予相应权限,最后将角色赋予用户。 将这个问题抽象为流程,如下图

流程图

然后我们把上图映射到我们的系统里面

系统流程

当医生登录时,只看得到医生门诊, 护士登录只看得到预约登记,他们都看不到其他用户的专属的页面,但是医院管理员可以看到全部的。

这样就实现了用户、权限、角色的关联,一个简易的权限系统就完成了。

本篇文章主要是工作中开发权限系统的总结,通过给大家介绍 RBAC 的模型和概念,让大家了解到 RBAC 的核心是通过角色管理权限,角色赋予用户来进行权限管理,让大家在设计权限系统设计时可以进行参考。

文章分类
前端
文章标签