RBAC(基于角色访问控制)-系统权限设计
Role-Based Access Control,基于角色(Role)的访问控制。
简单说就是通过将权限分配给➡角色,再将角色分配给➡用户,来实现对系统资源的访问控制。一个用户拥有若干角色,每一个角色拥有若干权限。
3个概念:
角色(Role):角色是指在系统中具有一组相关权限的抽象概念,代表了用户在特定上下文中的身份或职能,例如管理员、普通用户等。
权限(Permission):权限是指对系统资源进行操作的许可,如读取、写入、修改等。权限可以被分配给角色。
- 功能权限是系统执行权限控制的基本单元,包括页面权限、菜单权限、按钮权限等
- 数据权限包括基础数据、业务数据、资源数据等
用户(User):用户是指系统的实际使用者,每个用户可以被分配一个或多个角色。
RBAC0模型:
RBAC1:角色继承的RBAC模型
在角色中引入上下级关系的RBAC模型就叫做角色继承的RBAC模型(RBAC1),通过给角色分级,高级别的角色可继承低级别角色的权限,一定程度上简化了权限管理工作
另外角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系要求角色继承关系是一个绝对偏序关系,允许角色间的多向继承,即下级角色可以拥有多个上级角色,上级角色也可以拥有多个下级角色。而受限继承关系则要求角色继承关系是一个树状结构,角色间只能单向继承,即下级角色只能拥有一个上级角色,但是上级角色可以拥有多个下级角色。
RBAC2:角色限制的RBAC模型
RBAC2 = RBAC1 + 职责分离
-
静态职责分离(SSD):
- 定义:静态职责分离是指在权限分配阶段,通过预定义的规则确保某些角色之间不能同时被分配给同一个用户。
- 目的:防止用户拥有过多的权限,从而减少潜在的安全风险。
- 示例:销售经理和财务经理角色互斥,不能同时赋予同一用户。
1、角色互斥:互斥角色是指各自权限互相制约的两个角色,同一用户只能分配到一组互斥角色集合中至多一个角色。比如财务部的用户就不能同时拥有会计和审核员这两个角色;
2、基数约束:用户可拥有的角色数量受限,角色被分配的用户数量受限,角色对应的权限数量也受限;
3、先决条件:用户在获得角色A的同时,必须先获得角色B。
-
动态职责分离(DSD):
- 定义:动态职责分离是指在用户激活角色时,系统检查并确保用户当前激活的角色之间不存在冲突。
- 目的:在用户会话期间,实时监控角色激活情况,确保不违反职责分离原则。
- 示例:用户已激活销售经理角色时,系统阻止其同时激活财务经理角色。
RBAC3:统一的RBAC模型
RBAC3=RBAC1+RBAC2,既引入了角色间的继承关系,又引入了角色限制关系。
- 核心特性:RBAC3不仅支持角色的分层(如RBAC1),还引入了职责分离(如RBAC2)的特性,包括静态职责分离和动态职责分离。这使得RBAC3在权限管理上更加灵活和强大。
- 角色分层:在RBAC3中,角色之间存在上下级关系,这种层次结构有助于更好地组织和管理角色。
- 职责分离:RBAC3通过静态和动态两种方式确保用户不能同时拥有冲突的角色或权限,从而增强了系统的安全性。
组:完善的RBAC模型
现有的权限管理模型虽然已经对“角色”进行了层级优化,但并没有优化“用户”方,这就意味着每入职一个新员工,小王得单独为其设置权限,还是很麻烦,于是他利用抽象的思想将相同属性的用户进行归类。在公司里,最简单的相同属性就是“部门”了,如果给部门赋予了角色和权限,那么这个部门中的所有用户都有了部门权限,而不需要为每一个用户再单独指定角色。
用户可以分组,权限同样也可以分组。在权限特别多的情况下,可以把同一层级的权限合并为一个权限组,如二级菜单下面有十几个按钮,如果对按钮的操作没有角色限制,可以把这些按钮权限与二级菜单权限合并为一个权限组,然后再把权限组赋予角色就可以了。
“组”概念的引入完善了RBAC模型,在简化操作的同时更贴近了实际业务,便于理解。
参考资料:https://blog.csdn.net/fsgvcrgg/article/details/132016290?spm=1001.2014.3001.5501
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)