企业管理系统上线后常见的现象是:某位主任能看到其他部门的数据,或某人已经调岗却还能点开旧模块。问题往往不在开发速度,而在权限模型从一开始就没把「角色、数据范围、审批权」分开设计。下面按现象、原因、排查顺序、预防措施展开。
权限模型的源头:权限到底代表谁
权限模型的设计前提,是承认三种不同性质的授权:功能权限决定看得见哪些菜单和按钮,数据权限决定能看多少行数据,审批权决定流程走到谁手里。三者授权对象不同,生命周期也不同。
把它们混在一张用户权限表里,短期上线快,后面改动就痛。比较稳的做法是让授权都指向组织结构中的岗位或角色,人只是临时挂载点。人员流动只改挂载关系,不动权限定义本身。
这一段决定了后面排查的难度。建议先在纸面上画出组织、岗位、角色、数据范围四层关系,再决定表结构,比直接堆字段更省事。需要落到具体系统时,可参考软件定制开发与系统集成服务中权限与组织模块的常见拆法。
角色设计:RBAC 怎么划才不失控
角色数量膨胀和角色数量不足是同一枚硬币的两面。角色太少,只能靠特殊授权补丁;角色太多,没人说得清谁该属于哪个角色。判断标准是:角色名能否对应一个真实岗位职责。
- 角色按职责划分,不建议按人划分,出现以人名命名的角色就要警惕。
- 角色绑定功能权限,不直接绑定临时数据范围,数据范围另走数据权限层。
- 角色继承层级控制在两层以内,过深的继承链会让排查需要来回跳转。
- 为每个角色记录用途说明与维护人,便于几个月后回头判断能否合并。
实施中还会遇到兼岗的情况。常见做法是允许一人挂多个角色,权限取并集,但数据范围取交集更安全,这一点要在需求调研阶段就和业务方确认清楚。
数据权限的边界:从行级过滤到字段脱敏
功能权限做完,越权问题往往还没结束。数据权限要回答的是同一张单据列表,销售看到自己,经理看到本部门,总监看到全公司。常见落点是按组织树、按负责人、按项目归属三种维度。
行级过滤要么在查询条件里统一注入,要么在数据访问层集中处理。走每个业务页面自己写条件,短期可行,加一个查询入口就漏一个口子。字段级权限通常按角色或岗位控制,例如金额、成本、身份证号这类字段对部分岗位只展示脱敏结果。
国产 OA 的二次开发里,数据权限一般也遵循类似思路,只是落到具体产品时需要按其扩展机制实现,不必从一开始就追求完全统一,可以先在小范围内验证方式可行再推广。
审批权不是菜单权限:流程节点的授权逻辑
审批权看起来是流程配置问题,实际上常被误当成菜单权限。能打开审批页面,不等于能作为某个节点的审批人。这两件事要分开校验,否则会出现有菜单无权限、有权限越级审批两种反弹。
流程里的审批人一般由发起人所在组织、单据金额区间、业务类型等条件共同决定,建议把选择规则集中在一个配置入口,而不是散落在各个节点。对于委托、代理、加签这类场景,要明确代理是否有同等审批效力,以及是否需要留痕。
审批权和角色权限若有重叠,可以用一句判断标准:审批权回答「这件事谁说了算」,角色权限回答「这个功能谁能用」。
现象出现时,按这个顺序排查
发现「同事能看到不该看的数据」,不建议全表翻找授权记录,先按从粗到细的顺序定位。
- 确认现象范围:是登录后一直存在,还是特定角色、特定页面才出现。
- 确认当前账号实际挂载的角色与权限集合,注意兼岗和临时授权。
- 检查数据权限的过滤入口是否被绕过,页面是否共用同一套过滤逻辑。
- 检查流程节点审批人规则,确认是否用菜单权限直接替代了审批人判断。
- 检查缓存与同步:角色变更后,权限是否即时刷新,相关模块缓存有没有过期策略。
- 检查审批委托与代理记录,确认是否有未关闭的代理关系。
- 确认代码改动时间与现象出现时间是否吻合,缩小范围再定位具体模块。
这个过程不需要猜测,只管记录每一步观察到的实际结果。有些项目会在集成第三方系统后出现权限错位,可以参考同类项目中的处理方式,见同类项目案例。
预防措施:让权限变更可控可查
治理权限问题靠一次整改不够,关键是让后续变更有据可查。比较实用的做法是:授权走审批流,变更留操作记录,到期授权自动失效,周期性地把角色和实际使用情况对一遍,偏离开放结果的回到配置里修正。
- 临时授权设置有效期,到期自动回收,不用人工盯。
- 权限变更留操作人与时间,可与业务流程节点对应查询。
- 每季度或半年组织一次角色与实际职责的对照检查。
- 离职、调岗、转项目的账号处理定为固定动作,纳入交接流程。具体交接环节可参考服务范围与交付流程。
权限模型不会一次做完美,更现实的目标是让每一次问题都能被定位、被修正、被记录,而不是靠个人记忆维持现状。
上线前后可直接对照的自查清单
不论系统是自研还是采购,交付前都可以逐条核对。
- 角色列表是否每个都能对应真实岗位职责,有没有以人名命名的角色。
- 数据权限是否由统一入口过滤,是否存在个别页面自行拼装查询条件的情况。
- 金额、成本、联系方式等敏感字段,是否明确了可见岗位与脱敏规则。
- 审批人规则是否集中在同一配置入口,能否按金额、组织、业务类型分别设置。
- 委托、代理、加签是否留痕,代理关系到期是否自动失效。
- 权限变更后是否即时生效,涉及缓存的模块有效期是否清楚。
- 离职、调岗、临时借调的账号处理是否写成流程,是否有固定负责人。