RBAC 模型与角色树概述

核心概念

基于角色的访问控制(RBAC)将权限管理从用户直接绑定权限,提升为“用户 → 角色 → 权限”的三层模型,使授权逻辑可复用、可审计。以下为 RBAC 核心实体及其关系。

实体定义示例
User系统使用者,不直接获得权限张三(员工工号)
Role权限的集合,关联岗位或职责HR 专员、项目经理
Permission对资源执行操作的能力查看员工信息、修改合同
Session用户激活的角色实例,控制生效范围张三激活“HR 专员”会话
关键原则:权限只能授予角色,不能授予用户;用户通过关联角色间接获得权限。这一隔离使权限变更只需调整角色,避免逐用户修改。

角色树结构

在企业级系统中,角色天然具备层级关系,形成「角色树」。父角色继承子角色的所有权限,并可以附加额外权限。合理的角色树能减少权限冗余,简化审计。

角色树结构示例 系统管理员 用户管理员 内容管理员 用户信息专员 账号审核专员 文章发布专员 评论审核 查看员工 冻结账号 发布文章 删除评论 角色树中父角色隐式继承子角色的所有权限,同一层级的角色互斥(职责分离原则)

权限分配策略

RBAC 标准族定义了四种主要分配策略(RBAC0~RBAC3),实际项目通常组合使用。

  1. RBAC0(核心 RBAC):用户-角色-权限三层结构,支持多对多关联。
  2. RBAC1(角色层级):引入角色继承树,父角色自动获得子角色权限。
  3. RBAC2(职责分离):静态/动态职责分离,防止冲突角色同时激活。
  4. RBAC3(统一模型):合并层级与职责分离,最常落地的工业级方案。
落地建议:业务系统推荐选择 RBAC1 + RBAC2,配合角色树与职责分离策略实现灵活且安全的权限体系。

常见误区

误区表现影响正确做法
角色膨胀为每个最小业务场景创建角色角色数量爆炸,管理成本剧增按「职责聚合」设计,避免细粒度角色
平铺角色所有角色放在同一层级,不使用继承权限冗余,更新需逐一修改利用角色树继承相似权限
权限直接挂用户绕过角色体系直接授权破坏 RBAC 模型,审计困难强制通过角色授予权限
忽略职责分离同一用户同时拥有互斥角色(如出纳与会计)内控风险,越权操作定义角色互斥组,运行时检查
警示:角色树不等于组织架构树!角色基于「权限域」而非「行政级别」设计。例如,“部门经理”角色可能只拥有“查看本部门员工”的权限,不应自动继承“副总裁”角色的权限。

术语辨析

  • 权限 vs 资源:权限 = 资源 + 操作(如“修改/contracts”),资源是数据实体,操作是动词。
  • 角色 vs 组:角色是权限的集合,组是用户的集合;一个角色可包含多个组的用户,组可关联多个角色。
  • 角色继承 vs 角色聚合:继承是“is-a”关系(子角色是父角色的一种特例),聚合是“has-a”关系(组合角色包含多个基本角色)。
  • 会话 vs 上下文:会话是用户激活的角色实例,上下文还包括 IP、时间、设备等动态条件。