权限矩阵与数据范围 P30 · 权限与系统管理
权限不是"能不能进这个页面",而是三个维度叠加: 功能权限(能点什么)、数据权限(能看多少)、字段权限(能看到哪些字段)。 这一页把三者一次讲透。
权限三维度、数据范围的六种类型、可筛选的权限矩阵、字段级权限示例、权限测试与验收方法。
功能权限、数据权限(行级)、字段权限(列级)、记录规则、共享规则、权限矩阵、最小权限原则。
只在前端隐藏按钮或字段,接口层不过滤。前端隐藏等于没挡—— 打开浏览器控制台就能看到全部数据。所有权限校验必须在服务端做。
1. 权限的三个维度
① 功能权限(能做什么)
菜单可见性、按钮可用性(新建/编辑/删除/审批/导出)。
粒度:模块 → 页面 → 按钮/动作。
例:采购员可"创建采购申请",但不能"审批"。
② 数据权限(能看多少)
同一张列表,不同人看到的行不同。
粒度:按组织/仓库/品类/客户/销售区域过滤。
例:华南仓仓管只看华南仓库存。
③ 字段权限(能看多少列)
同一条记录,不同人能看的字段不同。
粒度:字段级可见/可编辑。
例:仓管看采购单看不到单价与金额。
2. 六种数据范围
| 范围类型 | 含义 | 典型角色 |
|---|---|---|
| 全部 | 全集团数据 | 供应链总监、财务总监、审计 |
| 本公司/法人 | 仅限所属法人主体 | 子公司总经理、子公司财务 |
| 本部门及下级 | 按组织树向下包含 | 部门经理 |
| 本仓库/工厂 | 按库存组织过滤 | 仓管主管、仓库操作员 |
| 本人 | 仅自己创建或负责的数据 | 采购员(看自己的单)、销售(看自己的客户) |
| 自定义 | 按条件组合(品类+区域+客户组) | 品类采购经理、大客户经理 |
常见两种策略:取并集(任一规则允许即可见,宽松)或取交集(全部规则都允许才可见,严格)。 必须在设计阶段明确,否则会出现"这个人为什么能看到这条数据"的无法解释的情况。 涉及敏感数据(价格、成本、客户信息)时建议取交集。
3. 权限矩阵:选中角色,看它在各模块的权限
点击角色按钮切换视图4. 字段级权限示例:同一张采购订单
| 字段 | 采购员 | 仓储 | 财务 | 供应商(门户) |
|---|---|---|---|---|
| 物料 / 数量 / 交期 | 可见可改 | 可见 | 可见 | 可见(可确认交期) |
| 采购单价 | 可见可改 | 隐藏 | 可见 | 可见(仅自己报价) |
| 金额 / 税率 | 可见 | 隐藏 | 可见可核销 | 可见(自己的发票) |
| 供应商名称 | 可见 | 可见 | 可见 | 可见(仅自己) |
| 其他供应商报价 | 可见 | 隐藏 | 可见 | 隐藏 |
| 内部审批意见 | 可见 | 隐藏 | 可见 | 隐藏 |
① 隐藏字段必须在接口返回值里就过滤掉,而不是前端 CSS 隐藏; ② 隐藏字段的默认值不能影响业务逻辑(如金额隐藏后提交,服务端不能因此丢掉金额); ③ 导出功能要继承字段权限,否则"看不到但能导出",权限形同虚设。
5. 权限模块怎么验收
- 准备测试账号矩阵:每个角色一个账号,覆盖跨组织、跨仓库场景。
- 验证可见性:登录后检查菜单、列表行数、详情页字段是否符合预期。
- 验证越权:用 A 账号登录后,直接输入 B 账号数据的详情页 URL, 看是否被拦截——这是最容易被忽略的测试项。
- 验证接口:绕过页面直接调用接口(或用浏览器开发者工具看请求),确认服务端有校验。
- 验证导出与打印:导出文件里的字段是否与页面一致。
- 验证互斥与代理:互斥角色是否拦截、代理审批是否标记代签。
默认不给任何权限,按需申请、按需授予。反过来做(默认全给再回收)几乎必然遗漏, 而且遗漏往往在审计时才被发现。