第1章 权限模型的核心问题:权限管理目标、粗粒度与细粒度、RBAC的定位
1.1 权限管理的根本目标
权限管理不是「谁可以做什么」的简单映射,而是一个边界定义 + 信任链路 + 操作可控的系统工程。其根本目标可归纳为三个层次:
| 层次 | 目标 | 核心问题 |
|---|---|---|
| 身份层 | 确认「你是谁」 | 认证强度、会话管理、凭证存储 |
| 授权层 | 确认「你能做什么」 | 权限范围、资源边界、操作类型 |
| 审计层 | 确认「你做了什么」 | 操作日志、可追溯、不可抵赖 |
任何权限模型的设计,都必须在这三个层次上同时提供解决方案,缺一不可。缺失身份层会导致「冒充风险」,缺失授权层会导致「越权风险」,缺失审计层会导致「抵赖风险」。
1.2 粗粒度与细粒度的边界与权衡
粗粒度与细粒度描述的是权限控制的精度,本质是 管理成本 与 安全精度 之间的权衡。
粗粒度(Coarse-Grained)
以「角色」「部门」「功能模块」为最小控制单元。配置简单,运维成本低,但无法满足精确到行、字段、实例的管控需求。
以「角色」「部门」「功能模块」为最小控制单元。配置简单,运维成本低,但无法满足精确到行、字段、实例的管控需求。
细粒度(Fine-Grained)
以「操作」「数据行」「字段」「资源实例」为最小控制单元。安全精度高,但规则数量呈指数级增长,治理和性能压力大。
以「操作」「数据行」「字段」「资源实例」为最小控制单元。安全精度高,但规则数量呈指数级增长,治理和性能压力大。
| 维度 | 粗粒度 | 细粒度 |
|---|---|---|
| 控制单元 | 角色 / 模块 / 菜单 | 数据行 / 字段 / 操作 / 实例 |
| 配置复杂度 | 低(几十条规则) | 高(几千甚至上万条规则) |
| 运行时性能 | 高(缓存友好) | 中等(需动态计算) |
| 适用场景 | 内部管理系统、后台 | 多租户SaaS、金融、医疗 |
常见误区:不要在第一个版本就追求「全字段级细粒度」。粗粒度兜底 + 关键场景细粒度增量,是更稳妥的落地路径。细粒度不是设计出来的,而是演进出来的。
1.3 RBAC的定位:承上启下的权限中枢
RBAC(Role-Based Access Control)处于权限模型家族的中间位置:它既不极端粗放(如ACL直接挂用户),也不极端细碎(如ABAC按属性实时计算)。其核心定位是:
- 抽象层: 将「用户 ↔ 权限」的直接映射,转化为「用户 ↔ 角色 ↔ 权限」的三层结构。
- 复用层: 角色作为权限的「命名集合」,可以在多个用户间复用,降低管理熵值。
- 演进基座: 几乎所有现代权限系统(如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 缓存了旧策略 → 用户拿到不该有的权限。解决方案:策略版本号 + 缓存主动失效。
落地五步法
- 边界定义: 明确哪些资源需要权限保护,哪些是公开访问。
- 角色提炼: 从业务职能中抽象角色,每个角色有明确的职责描述。
- 权限映射: 为每个角色配置「资源 + 操作」的权限矩阵。
- 策略分层: 粗粒度用RBAC,关键敏感操作叠加细粒度条件。
- 持续审计: 上线后持续收集权限使用数据,优化角色定义。
1.7 验收标准
第1章的理论目标是否达成,可通过以下标准检验:
| 验收项 | 验收标准 | 验证方式 |
|---|---|---|
| 权限目标理解 | 能清晰区分身份层、授权层、审计层 | 画出三层架构图并标注信任边界 |
| 粗/细粒度判断 | 能根据业务场景选择合适的粒度 | 给出3个场景并说明粒度选择理由 |
| RBAC定位 | 能说出RBAC在权限模型家族中的位置 | 用一句话概括RBAC与ACL、ABAC的关系 |
| 组件职责 | 能列出PAP/PDP/PEP的职责与信任流 | 手绘组件交互流程图 |
第1章核心结语: 权限模型设计的本质是「用结构化的成本换取结构化的安全」。RBAC之所以成为工业级标准,正是因为它用「角色」这一层抽象,平衡了管理成本与安全精度。后续所有章节都将围绕这一核心定位展开。