返回介绍

14.3 RBAC

发布于 2025-04-26 13:16:50 字数 2413 浏览 0 评论 0 收藏

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 项目的分析文章。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。