前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RBAC 模型 - 权限系统是如何进行架构设计的?

RBAC 模型 - 权限系统是如何进行架构设计的?

作者头像
用户3806669
发布2021-07-06 14:33:17
6930
发布2021-07-06 14:33:17
举报
文章被收录于专栏:前端三元同学前端三元同学

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

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

首先请大家思考?个问题,我们为什么需要权限系统?
…思考 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 种:

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

2.2 RBAC1

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

2.3 RBAC2

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

2.4 RBAC3

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

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

三、RBAC 的特点

  1. 便于授权管理:RBAC 采用了角色继承的概念,它将角色组织起来,能够很自然地反映组织内部人员之间的职权、责任关系。
  2. 便于赋予最小权限原则:根据组织内的规章制度、职员的分工等设计拥有不同权限的角色,只有角色需要执行的操作才授权给角色,否则对操作的访问被拒绝。
  3. 便于职责分离:对于某些特定的操作集,某一个角色或用户不可能同时独立地完成所有这些操作,这时需要进行职责分离。有静态和动态两种实现方式。
  4. RBAC 模型没有提供操作顺序控制机制:这一缺陷使得 RBAC 模型很难应用关于那些要求有严格操作次序的实体系统。

四、如何设计权限系统

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

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

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

那么如何定义用户,角色,和权限呢?
  1. 权限,对于我们的网页中,如页面,按钮,接口都可以当做权限。
  2. 角色,用于关联权限的,用来描述当前权限的使用者。
  3. 用户,这个就很简单了,使用我们系统的都是用户。
接下来,我们思考,究竟如何将三者关联起来。

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

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端三元同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先请大家思考?个问题,我们为什么需要权限系统?
  • 一、什么是 RBAC 模型
  • 二、RBAC 模型的分类
    • 2.1 RBAC0
      • 2.2 RBAC1
        • 2.3 RBAC2
          • 2.4 RBAC3
            • 首先,我们思考一下一个简单的权限系统应该具备哪些内容?
            • 那么如何定义用户,角色,和权限呢?
            • 接下来,我们思考,究竟如何将三者关联起来。
        • 三、RBAC 的特点
        • 四、如何设计权限系统
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档