经过两年的B端项目设计工作经验,从设计经验及网络参考文档进行权限设计系统的归纳总结及知识积累。 在之前参与或设计的项目中,主要经历过DAC、MAC、RBAC0、ABAC等四种权限系统的设计及体验。

B端权限系统简介 - 图2

定义

权限管理系统是任何一个B端管理系统内都必备也是非常重要的模块,根据业务场景选择合适的权限系统框架将极大提高项目的执行效率,而选择合适的权限系统主要关注两个方面:1、权限颗粒度;2、数据权限及功能权限的区分。

权限颗粒度:分为粗颗粒细颗粒权限控制。粗颗粒权限主要包括常见菜单、按钮等控制;细颗粒权限则在此基础上进一步对数据级别进行控制。

数据权限:指数据中存在的数据是否能查看,如:某厂A、B车间,各车间主任只能看到对应车间数据,厂长两个车间数据都可以看到。

功能权限:指的是在系统中的一系列操作。常见的如:删除,编辑,提交等。

常见权限类型

  • ACL(访问控制列表):Access Control List
  • DAC(自主访问控制列表):Discretionary Access Control
  • MAC(强制访问控制):Mandatory Access Control
  • RBAC(基于角色的访问控制):Role-Based Access Control
  • ABAC(基于属性的访问控制):Attribute-Based Access Control

一、ACL(访问控制列表):Access Control List

解释:规定资源可以被哪些主体进行哪些操作

例:张伟在一个文件夹(资源)中授予小李(主体)文创建文档权限,现在小李可以创建文档(操作)。

tip:在ACL权限模型下,权限管理是围绕资源来设定的。

image.png

二、DAC(自主访问控制列表):Discretionary Access Control

解释:规定资源可以被哪些主体进行哪些操作 同时,主体可以将资源操作的权限,授予其他主体

例:张伟(主体)在一个文件夹(资源)中创建(操作)文档(资源),文档(资源)分享(操作)给小李(主体),小李(主体)又将文档分享(操作)给小王(主体)。

tip:DAC是ACL的一种实现,强调灵活性。纯粹的ACL,权限由中心管理员统一分配,缺乏灵活性。为了加强灵活性,在ACL的基础上,DAC模型将授权的权力下放,允许拥有权限的用户,可以自主地将权限授予其他用户。

image.png

三、MAC(强制访问控制):Mandatory Access Control

解释:a. 规定资源可以被哪些类别的主体进行哪些操作 b. 规定主体可以对哪些等级的资源进行哪些操作 当一个操作,同时满足a与b时,允许操作。

例:当一个档案室中,档案等级分为:秘密级、机密级、绝密级;人员类别分为:军事人员、财务人员、行政人员。其中一份机密级的财务档案,可以确保只有主体的等级是机密级,且是财务人员才能访问。如果是机密级的行政人员就无法访问。

tip:MAC是ACL的另一种实现,强调安全性。MAC会在系统中,对资源与主体,都划分类别与等级。

四、RBAC(基于角色的访问控制):Role-Based Access Control

解释:RBAC 与传统的任意访问控制系统中使用的访问控制列表 (ACL) 不同,它为在组织中具有意义的特定操作而不是低级数据对象分配权限。例如,访问控制列表可用于授予或拒绝对特定系统文件的写访问权限,但它不会规定如何更改该文件。在基于 RBAC 的系统中,操作可能是在金融应用程序中“创建信用账户”交易或在医疗应用程序中“填充血糖水平测试”记录。
image.png
B端权限系统简介 - 图6

RBAC权限随时代的发展又有三种分类:RBAC0系统模型、RBAC1系统模型、RBAC2系统模型。

RBAC0系统模型

RBAC0的基础理念是将“角色”这个概念赋予用户,在用户与权限之间通过角色进行关联,实现灵活配置。

RBAC模型的三要素为:用户、角色、权限。

  • 用户:是发起操作的主体,例如:后台管理系统的用户、OA系统的内部员工、面向C端的用户。
  • 角色:用于连接了用户和权限的桥梁,每个角色可以关联多个权限,同时一个用户也可以关联多个角色,那么这个用户就有了多个角色的多个权限。
  • 权限:用户可以访问的资源,包括:页面权限、操作权限、数据权限。

image.png

RBAC1模型:基于 RBAC0 加入角色继承

RBAC1模型是在RBAC0模型基础上,引入了角色继承的概念,即角色具有上下级的关系,每个等级权限不同,从而实现更细粒度的权限管理。
image.png

RBAC2 模型:基于 RBAC0 引入角色约束控制

RBAC2模型是在RBAC0模型基础上,对角色进行约束控制。RBAC2模型中添加了责任分离关系,规定了权限被赋予角色时或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。主要包括以下约束:

  • 互斥关系角色:同一用户只能分配到一组互斥角色集合中至多一个角色,互斥角色是指各自权限互相制约的两个角色。例如:设计部有交互设计师和视觉设计师两个角色,他们如果在系统中为互斥角色,那么用户不能同时拥有这两个角色,体现了职责分离原则。
  • 基数约束:一个角色被分配的用户数量受限;一个用户可拥有的角色数目受限;同一个角色对应的访问权限
  • 数目受限;以此控制高级权限在系统中的分配。
  • 先决条件角色:简单理解即如果某用户想获得上级角色,必须得先获得其下一级的角色,以此为一个先决条件。

五、ABAC(基于属性的访问控制):Attribute-Based Access Control

解释:不同于常见的将用户通过某种方式关联到权限的方式,ABAC则是通过动态计算一个或一组属性来是否满足某种条件来进行授权判断(可以编写简单的逻辑)。属性通常来说分为四类:用户属性(如用户年龄),环境属性(如当前时间),操作属性(如读取)和对象属性(如一篇文章,又称资源属性)。

例:设计部的作者张伟可以创建和更新文章,标签是技术和软件,处于草稿模式,2022-01-12和2022-02-20之间的连接来自山东。
截屏2022-01-18 23.00.50.png
截屏2022-01-18 23.25.31.png

总结

选择合适的权限设计体系将节省开发成本,目前经历过的项目感受RBAC型就完全够一般小型平台使用,偶然情况需要增加时间维度属性,控制访客数量,从而变成ABAC型权限。权限设计还有很多不同运用方式,只是根据作者阅历目前还没有见到,学习是一条漫长的路,我们在慢慢前进。加油!

参考链接:
https://blog.csdn.net/u011607686/article/details/89072494
https://www.yuque.com/liuxiaoting/nqruyh/ooq3hn
http://www.woshipm.com/pd/3753107.html
https://www.notion.so/d3971025b26044deb96e5c8bdba85552
https://dinolai.com/notes/others/authorization-models-acl-dac-mac-rbac-abac.html