功能权限矩阵:功能树构建、权限点挂载、角色-权限映射表、权限模板
功能权限矩阵是权限模型中最核心、最落地的产物,它决定了“谁能看到什么、能操作什么”。本章围绕矩阵的四个构成要素展开:功能树、权限点、映射表与权限模板,并给出分层设计、边界定义与落地验收标准。
4.1 功能树构建
功能树是对系统功能菜单的层次化抽象表达,其粒度决定权限管控的精细度。通常以应用系统为根节点,下级依次为模块、子模块、页面或功能分组。
| 层级 | 示例 | 说明 |
|---|---|---|
| 应用层 | ERP系统、CRM系统 | 最顶层,通常系统级隔离 |
| 模块层 | 采购管理、销售管理、库存管理 | 业务领域划分 |
| 子模块层 | 采购订单、供应商管理、退货管理 | 模块内的功能分组 |
| 页面/功能层 | 新增采购单、编辑供应商、查看退货列表 | 权限挂载的最小颗粒度 |
边界定义:功能树的深度建议控制在3~5层,超过5层会导致权限矩阵维护成本急剧上升,且容易出现权限过剩或缺失。对于复杂系统,优先考虑功能分组而不是无限增加层级。
4.2 权限点挂载
权限点指可被独立授权的原子操作,如“新增”、“编辑”、“删除”、“审核”、“导出”。权限点不允许嵌套或重复挂载,每个权限点必须且只能挂载到功能树的一个叶子节点上。
- 挂载策略: 功能树叶子节点作为权限点的容器,一个叶子节点可挂载1~N个权限点。
- 命名规范: 采用“模块_子模块_功能_操作”的四段式命名,保证全局唯一。例如:
purchase_order_add、purchase_order_audit。 - 关联逻辑: 权限点与功能节点之间存在强关联,功能节点移除时,其下的所有权限点自动失效。
最佳实践: 权限点数量建议控制在300~800个之间。过少会导致管控粗放,过多则带来配置负担。大型企业级系统可通过权限模板来管理高频组合。
4.3 角色-权限映射表
角色-权限映射表是连接角色与权限点的桥梁,它是运行时权限判断的直接数据来源。映射表采用多对多关系,即一个角色拥有N个权限点,一个权限点可被N个角色引用。
| 角色ID | 角色名称 | 权限点ID | 权限点编码 | 生效状态 |
|---|---|---|---|---|
| ROLE001 | 采购主管 | PERM001 | purchase_order_add | 启用 |
| ROLE001 | 采购主管 | PERM002 | purchase_order_edit | 启用 |
| ROLE001 | 采购主管 | PERM003 | purchase_order_audit | 启用 |
| ROLE002 | 采购专员 | PERM001 | purchase_order_add | 启用 |
| ROLE002 | 采购专员 | PERM002 | purchase_order_edit | 启用 |
落地风险: 映射表是权限变动的瓶颈。当权限点数量超过1000且角色数量超过200时,频繁的增删改操作会导致数据库锁竞争。建议引入权限快照表和批量生效机制,避免在业务高峰期直接操作主映射表。
4.4 权限模板
权限模板是对常见权限组合的预定义方案,用于快速初始化角色权限。模板可由系统预置(如“运营专员模板”、“财务审核模板”),也可由租户管理员自定义。
- 模板结构: 模板包含功能树选择范围 + 权限点勾选集合 + 模板有效期(可选)。
- 应用场景: 新角色创建、角色权限全量覆盖、跨部门权限标准化。
- 模板继承: 支持模板间继承,子模板可继承父模板的权限配置并追加差异化权限点。
选型权衡: 权限模板本质上是一种“权限组合的缓存”,使用模板可以大幅降低角色权限配置的操作成本。但需要注意,模板变更后,已关联角色的权限是否需要同步更新?建议设计为基于快照的同步,即模板变更时由管理员手动确认是否覆盖关联角色,避免自动化导致线上权限意外变更。
4.5 功能权限矩阵架构图
下图展示功能权限矩阵的四层核心结构,以及角色、映射表、权限模板之间的数据传递流向。
4.6 验收标准
- 完整性: 功能树覆盖所有已交付菜单及页面,无遗漏。每个叶子节点至少挂载1个权限点。
- 唯一性: 不存在编码重复或意义重叠的权限点。
- 可达性: 角色-权限映射表正确反映角色与权限点的关联关系,通过模拟账号登录后可验证每一个权限点的生效状态。
- 模板一致性: 使用权限模板创建的角色,其权限点集合与模板定义一致,无额外增加或缺失。
- 性能验收: 在200个角色、1500个权限点的规模下,单次权限查询平均响应时间不超过100ms。
常见误区: 不要在功能树中混入“业务状态”或“数据范围”节点,例如“已审核订单”、“待付款订单”等。功能树仅表达功能结构,数据范围的管控应移交数据权限模型处理,否则功能树将变得不稳定且难以维护。