本文目录导读:

角色权限分配是系统设计中的核心安全环节,核心思想是遵循最小权限原则(只给完成工作所需的最小权限)和职责分离原则(防止权力滥用)。
下面从通用方法论和实战步骤两个维度来拆解。
核心方法论:RBAC模型
最常用、最成熟的模型是基于角色的访问控制。
其本质不是直接把权限分配给用户,而是建立一个桥梁: 用户 ← 关联 → 角色 ← 关联 → 权限
为什么用角色?
- 管理效率:如果有100个销售,需要改权限时,只需修改“销售”这个角色,而不是改100个人。
- 清晰划分:权限会按“岗位职责”打包,逻辑清晰。
具体分配步骤(5步法)
假设你要为一家公司设计OA或SaaS系统的权限,可以按以下步骤操作:
第一步:整理“资源”与“操作”
梳理出系统里所有“能被操作的东西”(资源),以及能在它身上做的“动作”。
- 资源:客户信息、订单、合同、财务数据、用户账号。
- 操作:创建(Create)、查看/读取(Read)、编辑(Update)、删除(Delete)、审批(Approve)、导出(Export)。(即CRUD + 其他)
第二步:抽象“岗位职责”为“角色”
不要直接看用户,要看岗位,常见的角色有:
- 超级管理员:完全控制权。
- 系统管理员:负责配置系统、管理用户账号(但一般无权查看具体业务数据,如具体销售订单金额)。
- 部门经理:查看下属所有数据、审批订单、修改非敏感信息。
- 一线员工:只能创建和查看自己的数据,无权删除或审批。
- 审计/财务:只能查看所有数据(只读),不能新增或修改。
第三步:将“权限”挂载到“角色”
把第一步的(资源+操作)对应到第二步的角色。
- 销售员角色:
- 客户(读、写、创建)
- 订单(读、创建)
- 合同(读)
- 注意:不能删除客户,不能查看其他人客户。
- 销售经理角色:
- 客户(读下属、写下属、读全部)
- 订单(审批)
- 绩效报表(读)
- 财务角色:
- 合同(只读)
- 发票(创建、读、写)
第四步:创建“账户”并“分配角色”
将现实中的用户添加到系统。
- 李明(销售) → 授予“销售员”角色。
- 王芳(销售主管) → 授予“销售经理”角色。
进阶技巧: 如果一个人有双重身份怎么办?
- 多角色保留:张三既是会计又是人事专员,就给他挂两个角色,系统取两个角色的权限并集。
- 临时/兼职角色:项目组长”是一个临时角色,项目结束后收回。
第五步:处理“数据权限”(最容易被忽视)
这是最难的一步,角色只决定了“能不能看客户”,数据权限决定了“能看哪些客户”。
- 仅本人数据:普通销售只看自己新建的。
- 本部门数据:部门经理看部门所有人的。
- 全部数据:CEO看全公司。
- 自定义规则:指定某个人(如特定的客户经理)只能看某个特定大客户的订单。
经典分配原则(避坑指南)
- 最小权限:给用户只够完成工作的权限,财务只需要看发票,就不要给他“删除订单”的权限。
- 职责分离(SoD):关键流程必须由不同人完成。
- 错误做法: 一个人既能创建采购单,又能审核采购单,还能付款。→ 易贪污。
- 正确做法: 采购员创建 → 经理审批 → 财务付款,这三种角色不能合并。
- 默认拒绝:所有未明确授予的权限,默认都是拒绝,不要用黑名单,要用白名单。
- 定期审计:每季度检查一次角色权限,员工离职、转岗后,必须立即收回或修改权限。
一个简单的表格示例(CRM系统)
| 角色 | 客户管理 | 订单管理 | 报表查看 | 系统管理 | 特殊限制 |
|---|---|---|---|---|---|
| 普通销售 | 增、改、查(自己) | 增、查(自己) | 无 | 无 | 不可删除客户 |
| 销售经理 | 查(部门)、改(部门) | 查(部门)、审批 | 查看部门报表 | 无 | 无 |
| 销售总监 | 查(全公司)、改(全公司) | 查(全公司)、审批 | 查看全公司报表 | 无 | 无 |
| 系统管理员 | 无 | 无 | 无 | 全部 | 只能管理系统配置 |
| 财务 | 查(只读) | 查(只读)、导出发票 | 查看财务报表 | 无 | 不能修改订单价格 |
技术实现建议
如果是开发人员或选择第三方系统,建议考虑以下功能支持:
- 角色继承:销售经理”继承“销售”的所有权限,再额外增加审批权限(省时)。
- 角色互斥:设置财务角色不能同时为采购角色(自动检测冲突)。
- 动态权限:根据用户属性(如城市、级别)自动计算权限。
总结一句话:
先定义权限(增删改查),再打包成角色(销售、经理、财务),最后把人放进去,并额外加上数据范围限制。
如果你有具体的业务场景(比如电商后台、学校系统、医疗系统),可以告诉我,我能给出更定制化的分配方案。