14.3 RBAC
14.3.1 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。
14.3.2 RBAC 权限模型分类
RBAC 权限模型有四种不同的分类,我们分别来看一下。
RBAC0
RBAC0 是最简单的用户、角色、权限模型,也是 RBAC 权限模型中最核心的一部分,后面其他模型都是在此基础上建立的。在 RBAC0 中,一个用户可以具备多个角色,一个角色可以具备多个权限,最终用户所具备的权限是用户所具备的角色的权限并集,如图 14-8 所示。
图 14-8 RBAC0 权限模型
RBAC1
RBAC1 则是在 RABC0 的基础上引入了角色继承,让角色有了上下级关系,如图 14-9 所示。
图 14-9 RBAC1 权限模型
角色继承实际上也非常容易,在本书第 13.3.2 小节中,我们已经介绍过角色继承的实现方式,这里不再赘述。
RBAC2
RBAC2 也是在 RBAC0 的基础上进行扩展,引入了静态职责分离和动态职责分离。要理解职责分离,得先理解角色互斥。在实际项目中,有一些角色是互斥的、对立的,例如,财务这个角色一般是不能和其他角色兼任的,否则自己报账自己审批。通过职责分离可以解决这一问题,职责分离有两种,静态职责分离和动态职责分离:
- 静态职责分离(Static Separation of Duty,SSD):在权限配置阶段就做限制。比如,同一用户不能授予互斥的角色,用户只能有有限个角色,用户获得高级权限之前要有低级权限等。
- 动态职责分离(Dynamic Separation of Duty,DSD):在运行阶段进行限制。比如,运行时同一用户下 5 个角色中只能同时有 2 个角色激活等。
RBAC2 权限模型如图 14-10 所示。
图 14-10 RBAC2 权限模型
RBAC3
RBAC3 是 RBAC1 和 RBAC2 的合体,如图 14-11 所示。
图 14-11 RBAC3 权限模型
这就是 RBAC 权限模型的四种不同分类。如果这四种模型依然不能满足我们的项目需求,开发者也可以在此基础上进行扩展,例如用户分组、角色分组等。
14.3.3 RBAC 小结
不同于 Acl 在使用时需要额外引入 spring-security-acl 依赖,RBAC 权限模型通过本书第 13 章中介绍的权限管理知识就可以快速实现。从技术角度来说,RBAC 用到的都是非常基础的权限管理知识,这也是 RBAC 比较受欢迎的原因之一,因为不需要再去额外学习新技术,利用已有的权限管理技术,结合 RBAC 这样一种“指导思想”,就能很快实现 RBAC 权限模型。所以这里就不给出案例了。有需要的读者可以关注本书技术支持微信公众号“江南一点雨”,回复 RBAC,查询笔者对于一些开源 RBAC 项目的分析文章。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论