RBAC

RBAC 权限模型介绍

RBAC(Role-based access control,基于角色的访问控制)是一种以角色为基础的访问控制,它是一种较新且广为使用的权限控制机制,这种机制不是直接给用户赋予权限,而是将权限赋角色。

RBAC 权限模型将用户按角色进行归类,通过用户的角色来确定用户对某项资源是否具备操作权限。RBAC 简化了用户与权限的管理,它将用户与角色关关、角色与权限关联、权限与资源关联,这种模式使得用户的授权管理变得非常简单和易于维护。

RBAC 权限模型有三原则:

  1. 最小权限:给角色配置的权限是其完成任务所需要的最小权限集合。

  2. 职责分离:通过相互独立互斥的角色来共同完成任务。

  3. 数据抽象:通过权限的抽象来体现,RBAC 支持的数据抽象程度与 RBAC 的实现细节有关。

RBAC 的应用非常广泛,除了常规的企业级应用,RBAC 也广泛应用在医疗、国防等领域。

关于 RBAC 的更多介绍,读者可以参考这个文档: https://csrc.nist.gov/projects/Role-Based-Access-Control

RBAC 权限模型分类

RBAC 权限模型有四种不同的分类,我们分别来看一下。

RBACO

RBACO 是最简单的用户、角色、权限模型,也是 RBAC 权限模型中最核心的一部分,后面其他模型都是在此基础上建立的。在 RBACO 中,一个用户可以具备多个角色,一个角色可以具备多个权限,最终用户所具备的权限是用户所具备的角色的权限并集,如图 14-8 所示,

image 2024 04 15 19 12 54 681
Figure 1. 图14-8 RBACO权限模型

RBAC1

RBAC1 则是在 RABCO 的基础上引入了角色继承,让角色有了上下级关系,如图14-9所 示。

image 2024 04 15 19 13 53 959
Figure 2. 图14-9 RBAC1权限模型

角色继承实际上也非常容易,在本书第 13.3.2 小节中,我们已经介绍过角色继承的实现方式,这里不再赘述。

RBAC2

RBAC2 也是在 RBACO 的基础上进行扩展,引入了静态职责分离和动态职责分离。要理解职责分离,得先理解角色互斥。在实际项目中,有一些角色是互斥的、对立的,例如,财务这个角色一般是不能和其他角色兼任的,否则自已报账自已审批。通过职责分离可以解决这一问题,职责分离有两种,静态职责分离和动态职责分离:

  • 静态职责分离(Static Separation of Duty,SSD):在权限配置阶段就做限制。比如,同一用户不能授予互斥的角色,用户只能有有限个角色,用户获得高级权限之前要有低级权限等。

  • 动态职责分离(Dynamic Separation of Duty,DSD):在运行阶段进行限制。比如,运行时同一用户下 5 个角色中只能同时有 2 个角色激活等。

RBAC2 权限模型如图14-10所示。

image 2024 04 15 19 16 49 951
Figure 3. 图14-10 RBAC2权限模型

RBAC3

RBAC3 是 RBAC1 和 RBAC2 的合体,如图14-11所示。

image 2024 04 15 19 17 46 343
Figure 4. 图14-11 RBAC3权限模型

这就是 RBAC 权限模型的四种不同分类。如果这四种模型依然不能满足我们的项目需求,开发者也可以在此基础上进行扩展,例如用户分组、角色分组等。

RBAC 小结

不同于 Acl 在使用时需要额外引入 spring-security-acl 依赖,RBAC 权限模型通过本书第 13 章中介绍的权限管理知识就可以快速实现。从技术角度来说,RBAC 用到的都是非常基础的权限管理知识,这也是 RBAC 比较受欢迎的原因之一,因为不需要再去额外学习新技术,利用已看的权限管理技术,结合 RBAC 这样一种 “指导思想”,就能很快实现 RBAC 权限模型。所以这就不给出案例了。有需要的读者以关注本书技术支持微信公众号 “江南一点雨”,回复 RBAC,查询笔者对于一些开源 RBAC 项目的分析文章。