第1章 权限模型的核心问题:权限管理目标、粗粒度与细粒度、RBAC的定位

1.1 权限管理的根本目标

权限管理不是「谁可以做什么」的简单映射,而是一个边界定义 + 信任链路 + 操作可控的系统工程。其根本目标可归纳为三个层次:

层次 目标 核心问题
身份层 确认「你是谁」 认证强度、会话管理、凭证存储
授权层 确认「你能做什么」 权限范围、资源边界、操作类型
审计层 确认「你做了什么」 操作日志、可追溯、不可抵赖

任何权限模型的设计,都必须在这三个层次上同时提供解决方案,缺一不可。缺失身份层会导致「冒充风险」,缺失授权层会导致「越权风险」,缺失审计层会导致「抵赖风险」。

1.2 粗粒度与细粒度的边界与权衡

粗粒度与细粒度描述的是权限控制的精度,本质是 管理成本 与 安全精度 之间的权衡。

粗粒度(Coarse-Grained)
以「角色」「部门」「功能模块」为最小控制单元。配置简单,运维成本低,但无法满足精确到行、字段、实例的管控需求。
细粒度(Fine-Grained)
以「操作」「数据行」「字段」「资源实例」为最小控制单元。安全精度高,但规则数量呈指数级增长,治理和性能压力大。
维度 粗粒度 细粒度
控制单元 角色 / 模块 / 菜单 数据行 / 字段 / 操作 / 实例
配置复杂度 低(几十条规则) 高(几千甚至上万条规则)
运行时性能 高(缓存友好) 中等(需动态计算)
适用场景 内部管理系统、后台 多租户SaaS、金融、医疗
常见误区:不要在第一个版本就追求「全字段级细粒度」。粗粒度兜底 + 关键场景细粒度增量,是更稳妥的落地路径。细粒度不是设计出来的,而是演进出来的。

1.3 RBAC的定位:承上启下的权限中枢

RBAC(Role-Based Access Control)处于权限模型家族的中间位置:它既不极端粗放(如ACL直接挂用户),也不极端细碎(如ABAC按属性实时计算)。其核心定位是:

  • 抽象层: 将「用户 ↔ 权限」的直接映射,转化为「用户 ↔ 角色 ↔ 权限」的三层结构。
  • 复用层: 角色作为权限的「命名集合」,可以在多个用户间复用,降低管理熵值。
  • 演进基座: 几乎所有现代权限系统(如ABAC、ReBAC)都在RBAC基础上叠加属性或关系扩展。
RBAC在权限模型中的定位与分层 RBAC 定位:承上启下的权限中枢 粗粒度权限控制层 用户 ↔ 角色 / 用户 ↔ 部门 / 用户 ↔ 功能模块 管理成本低 · 配置简单 · 适合后台与内部系统 RBAC 核心层:用户 ↔ 角色 ↔ 权限 角色作为权限集合的命名抽象,实现权限复用与解耦 支持角色继承、角色互斥、会话角色绑定 细粒度扩展层(叠加能力) ABAC(属性)· ReBAC(关系)· 数据级权限 · 字段级权限 在RBAC基座上按需叠加,避免初期过度设计 越往上层越粗放 越往下层越精细 管理成本递减 安全精度递增

1.4 组件职责与信任链路

一个典型的RBAC系统由以下核心组件构成,每个组件承担明确的职责,并形成一条完整的信任链路:

组件 职责 信任边界
身份提供方(IdP) 用户注册、登录、MFA、会话签发 认证边界,对外暴露最少接口
策略管理点(PAP) 角色定义、权限分配、策略存储 管理边界,仅管理员可操作
策略决策点(PDP) 接收请求、计算角色权限、返回决策 逻辑边界,无状态可水平扩展
策略执行点(PEP) 拦截请求、调用PDP、执行允许/拒绝 运行时边界,与应用代码融合
审计日志 记录决策结果与操作行为 数据边界,只写不删、定期归档

信任链路流向: PEP 拦截用户请求 → PEP 向 PDP 发起鉴权请求 → PDP 从 PAP 加载策略 → PDP 计算决策 → PEP 执行决策 → 审计日志记录全过程。任何环节的信任断裂都会导致权限绕过或越权。

1.5 选型权衡:何时选RBAC,何时放弃

条件 推荐选择 原因
用户量 < 1万,角色 < 50 RBAC(标准) 管理成本低,角色复用充分
用户量 > 10万,角色 > 200 RBAC + 角色分组/层级 避免角色爆炸,引入继承与分组
权限依赖数据属性(如部门、地区) RBAC + ABAC 混合 用ABAC处理动态属性,RBAC处理静态角色
权限依赖社交关系(如文档分享) ReBAC(关系型) RBAC不适合处理“谁创建了资源”这种关系维度
经验法则:如果项目刚起步,不确定权限粒度需求,优先从标准RBAC开始。RBAC是「最不容易选错」的起点,后续向ABAC或ReBAC演进时,RBAC的封装层可以直接复用。

1.6 风险点与落地步骤

主要风险点

  • 角色爆炸: 每个用户一个角色 → 失去抽象意义 → 退化为ACL。解决方案:角色继承 + 角色模板。
  • 权限蔓延: 角色权限越加越多 → 角色失去语义 → 变成大杂烩。解决方案:定期角色审计 + 最小权限原则。
  • 缓存与决策不一致: PDP 缓存了旧策略 → 用户拿到不该有的权限。解决方案:策略版本号 + 缓存主动失效。

落地五步法

  1. 边界定义: 明确哪些资源需要权限保护,哪些是公开访问。
  2. 角色提炼: 从业务职能中抽象角色,每个角色有明确的职责描述。
  3. 权限映射: 为每个角色配置「资源 + 操作」的权限矩阵。
  4. 策略分层: 粗粒度用RBAC,关键敏感操作叠加细粒度条件。
  5. 持续审计: 上线后持续收集权限使用数据,优化角色定义。

1.7 验收标准

第1章的理论目标是否达成,可通过以下标准检验:

验收项 验收标准 验证方式
权限目标理解 能清晰区分身份层、授权层、审计层 画出三层架构图并标注信任边界
粗/细粒度判断 能根据业务场景选择合适的粒度 给出3个场景并说明粒度选择理由
RBAC定位 能说出RBAC在权限模型家族中的位置 用一句话概括RBAC与ACL、ABAC的关系
组件职责 能列出PAP/PDP/PEP的职责与信任流 手绘组件交互流程图
第1章核心结语: 权限模型设计的本质是「用结构化的成本换取结构化的安全」。RBAC之所以成为工业级标准,正是因为它用「角色」这一层抽象,平衡了管理成本与安全精度。后续所有章节都将围绕这一核心定位展开。