SpringSecurity中最流⾏的权限管理模型!
松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的⼩伙伴戳这⾥-->
前⾯和⼤家说了 ACL,讲了理论,也给了⼀个完整的案例,相信⼩伙伴们对于 ACL 权限控制模型都已经⽐较了解了。
本⽂我要和⼤家聊⼀聊另外⼀个⾮常流⾏的权限管理模型,那就是 RBAC。
1.RBAC 简介
RBAC(Role-based access control)是⼀种以⾓⾊为基础的访问控制(Role-based access control,RBAC),它是⼀种较新且⼴为使⽤的权限控制机制,这种机制不是直接给⽤户赋予权限,⽽是将权限赋予⾓⾊。
RBAC 权限模型将⽤户按⾓⾊进⾏归类,通过⽤户的⾓⾊来确定⽤户对某项资源是否具备操作权限。RBAC 简化了⽤户与权限的管理,它将⽤户与⾓⾊关联、⾓⾊与权限关联、权限与资源关联,这种模式使得⽤户的授权管理变得⾮常简单和易于维护。
2.RBAC 的提出
权限、⾓⾊这些东西,在早期 1970 年代的商业计算机程序中就可以到相关的应⽤,但是早期的程序相对简单,⽽且并不存在⼀个明确的、通⽤的、公认的权限管理模型。
Ferraiolo 和 Kuhn 两位⼤佬于 1992 年提出了⼀种基于通⽤⾓⾊的访问控制模型(看来这个模型⽐松哥年龄还⼤),⾸次提出了 RBAC 权限模型⽤来代替传统的 MAC 和 DAC 两种权限控制⽅案,并且就 RBAC 中的相关概念给出了解释。
Ferraiolo,Cugini 和 Kuhn 于 1995 年扩展了 1992 年提出的权限模型。该模型的主要功能是所有访问都是通过⾓⾊进⾏的,⽽⾓⾊本质上是权限的集合,并且所有⽤户只能通过⾓⾊获得权限。在组织内,⾓⾊相对稳定,⽽⽤户和权限都很多,并且可能会迅速变化。因此,通过⾓⾊控制权限可以简化访问控制的管理和检查。
到了 1996 年,Sandhu,Coyne,Feinstein 和 Youman 正式提出了 RBAC 模型,该模型以模块化⽅式细化了 RBAC,并提出了基于该理论的 RBAC0-RBAC3 四种不同模型。
今天,⼤多数信息技术供应商已将 RBAC 纳⼊其产品线,除了常规的企业级应⽤,RBAC 也⼴泛应⽤在医疗、国防等领域。
⽬前⽹上关于 RBAC 理论性的东西松哥只到英⽂的,感兴趣的⼩伙伴可以看下,地址是:
如果⼩伙伴们有中⽂的资料链接,欢迎留⾔说明。
3.RBAC 三原则
1. 最⼩权限:给⾓⾊配置的权限是其完成任务所需要的最⼩权限集合。
2. 责任分离:通过相互独⽴互斥的⾓⾊来共同完成任务。
3. 数据抽象:通过权限的抽象来体现,RBAC ⽀持的数据抽象程度与 RBAC 的实现细节有关。
4.RBAC 模型分类
说到 RBAC,我们就得从它的模型分类开始看起。
4.1 RBAC0
RBAC0 是最简单的⽤户、⾓⾊、权限模型。RBAC0 是 RBAC 权限模型中最核⼼的⼀部分,后⾯其他模型都是在此基础上建⽴。
图⽚源⾃⽹络
在 RBAC0 中,⼀个⽤户可以具备多个⾓⾊,⼀个⾓⾊可以具备多个权限,最终⽤户所具备的权限是⽤户所具备的⾓⾊的权限并集。
4.2 RBAC1
RBAC1 则是在 RABC0 的基础上引⼊了⾓⾊继承,让⾓⾊有了上下级关系。
图⽚源⾃⽹络
在本系列前⾯的⽂章中,松哥也曾多次向⼤家介绍过 Spring Security 中的⾓⾊继承。
4.3 RBAC2
RBAC2 也是在 RBAC0 的基础上进⾏扩展,引⼊了静态职责分离和动态职责分离。
图⽚源⾃⽹络
要理解职责分离,我们得先明⽩⾓⾊互斥。
在实际项⽬中,有⼀些⾓⾊是互斥的,对⽴的,例如财务这个⾓⾊⼀般是不能和其他⾓⾊兼任的,否则⾃⼰报账⾃⼰审批,岂不是爽歪歪!通过职责分离可以解决这个问题:
静态职责分离
springboot是啥在设置阶段就做好了限制。⽐如同⼀⽤户不能授予互斥的⾓⾊,⽤户只能有有限个⾓⾊,⽤户获得⾼级权限之前要有低级权限等等。
动态职责分离
在运⾏阶段进⾏限制。⽐如运⾏时同⼀⽤户下5个⾓⾊中只能同时有2个⾓⾊激活等等。
4.4 RBAC3
将 RBAC1 和 RBAC2 结合起来,就形成了 RBAC3。
图⽚源⾃⽹络
5.扩展
我们⽇常见到的很多权限模型都是在 RBAC 的基础上扩展出来的。
例如在有的系统中我们可以见到⽤户组的概念,就是将⽤户分组,⽤户同时具备⾃⾝的⾓⾊以及分组的⾓⾊。
6.⼩结
好啦,今天就和⼩伙伴们简单介绍下 RBAC 权限模型。其实 RBAC 只要把权限模型搞清楚了,技术上来说,基本上没啥问题。如果你把松哥 vhr 中涉及到的 Spring Security 技术搞懂了,结合今天的⽂章,⽤ Spring Security 实现 RBAC 完全不成问题~当然,我后⾯也抽
空给⼤家整⼀个 RBAC 的 DEMO。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论