RBAC介绍(权限)
RBAC(Role-Based Access Control)基于角色的访问控制。权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。
核心三元组
- Who:权限的拥有者或主体(User,Role)
- What:操作或对象(Operation,Object)
- How:具体的权限(Privilege,正向授权与负向授权)
四种模型
- RBAC0:RBAC 的核心思想,最基础
- RBAC1:在 RBAC0 基础上增加了角色分层模型
- RBAC2:在 RBAC0 基础上增加了约束模型(如互斥角色)
- RBAC3:RBAC1 + RBAC2,即完整模型
表设计
典型的 RBAC 表结构:
- 用户表(user):用户基本信息
- 角色表(role):角色信息
- 权限表(permission):权限信息
- 用户角色关联表(user_role):用户与角色的多对多关系
- 角色权限关联表(role_permission):角色与权限的多对多关系
业务结合
在实际权限系统中,完全遵循 RBAC 模型很难,因为业务差异化考量会导致系统无法扩展。
设计建议:RBAC 是一种模型和思想,不是要完全参照,而是在这个基础之上融入自己的思想和业务。
权限判断流程
以 Shiro 为例:
- 权限赋予:当前用户的权限可分配给下级角色,但下级角色权限 ≤ 当前用户权限
- 权限加载:用户登录后,第一次使用权限判断时加载权限
- 权限判断:走正常用户权限判断,数据操作需判断归属用户(业务层逻辑)
- 禁用/启用:添加到禁用列表,被禁用用户无法操作任何内容
不要让框框架架限制业务,也不要让业务局限于框框架架。基于框架做业务封装。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 符十三郎!

