配置一个人的权限
模型起草的单据走同一套权限,个人授权只追加、可加可减
一个人在系统里能做什么,由四层能力叠加而成:职位能力集、特殊身份、任命、个人授权。模型起草的单据走同一套权限、审批链与规则,没有为模型另开的通道。需要限时、按需授权的场景,这里的机制不够,要另配。
判定怎样查表、拒绝为什么先于允许,见谁能做什么。这里只讲能力怎样配出来。
四层能力
图里蓝色的剥离约束横跨四层,说明它管的是四条路径,不只是最后一层。
| 层 | 来源 | 怎样叠加 |
|---|---|---|
| 职位能力集 | 每个职位带一组能力 | 起点 |
| 特殊身份 | 职位之外带来的能力 | 在上一层的结果上加 |
| 任命 | 职位之外的任命,如分支负责人任命 | 在上一层的结果上加 |
| 个人授权 | 对某个人单独加一项或减一项 | 最后叠加,可加可减 |
系统在会话开始时把这份能力算好并冻结,之后一次会话内答案不变。
一个示例:某个职位带 customer.read 与 sign.finance,这个职位不进签核位;经办人另给此人加了 report.read,还想加 approval.final_exempt。
| 动作 | 结果 |
|---|---|
| 起点:职位能力集 | customer.read、sign.finance |
个人授权加 report.read | 加入 |
个人授权加 approval.final_exempt | 不采用,个人授权不能授予免审终局 |
| 按「这个职位不进签核位」剥离签核能力 | sign.finance 不进入结果 |
| 冻结为会话快照 | customer.read、report.read,附权限集版本号 |
能力名与职位均为示例,企业的能力清单在设计阶段确定。装配结果是一份冻结的快照,会话期间不再变;前端读这份清单显示入口,服务端仍按策略表判定。
要说清一个人为什么有某项能力,逐层查四层来源即可。
个人授权
一次个人授权是新增的一行,不在旧行上改值。每次加或减都留痕:授权人、时间、变更前值、变更后值、理由。
只追加的好处是:某一时刻这个人有过哪些个人授权,从行本身就能还原,有人问「这个人上个月为什么能看报表」时,查得到当时的状态。
个人授权与职位能力集是两回事:新的授权只影响这一个人,不改职位能力集。
撤销个人授权
撤销一条个人授权,系统只收回这条授权自己加上的那一项。职位、身份、任命带来的同一项能力不变。所以撤销之后,此人可能仍然有这项能力,因为别的层也给了它。
撤销写成什么,由一支纯函数决定:写「删加项」,还是「写减项」。它的决策表与后端实现逐行对拍。纯函数指同样的输入得到同样的输出,不读外部状态。
核对撤权操作时,可以要这张决策表,对照几个具体情形看结果:这项能力只来自个人授权,还是另有来源。
签核能力的四条路径
两条组合不可授予:
- 个人授权不能授予免审终局,即单据不经审批链直接通过的能力。
- 某些职位不进签核位。
第二条的难处在路径多。签核能力可以从职位、特殊身份、任命、个人授权四条路径进来。
SZV 对四条路径一律剥离,并用代码里的常量白名单加代码扫描守住这条约束。单在个人授权入口设防,拦不住另外三条路径。
这类约束属于职责分离,对应 NIST SP 800-53 的 AC-5 控制项。它管的是一个人身上的能力组合,单看哪一条授权都看不出问题。
在岗状态与代签
账号有在岗状态:在岗、请假、出差。可以填预计回岗时间,到点自动回到在岗。某个签核位的持有人全部请假、出差或停用,会触发审批里该位的代签开放,规则见审批流转。
谁在岗、谁能代签,由账号状态与兜底表(按职位排好的代签顺序)算出,不靠临时指派。
缺失时按拒绝处理
| 缺什么 | 结果 |
|---|---|
| 会话里缺能力字段 | 当作空能力,什么动作都不准 |
| 缺可见分支 | 当作空集,什么数据都看不到 |
配置漏一项的后果是有人做不了事,做不了事的人会来报告,多放出去的权限往往没人发现。
限制与不适用
- 权限撤掉之后,已登录的会话何时失效要另外约定,因为能力在会话开始时冻结。
- 限时授权与周期性复核是权限管理的常见做法,这两项按企业要求在合同中约定。
- 需要限时、按需授权的场景,要另配机制。
与常见做法对照
| 问题 | SZV | 常见做法 |
|---|---|---|
| 撤权何时生效 | 能力在会话开始时冻结,快照附权限集版本号;撤权的生效时刻按企业要求在合同中约定 | 缩短时差的通行做法是短期凭证到期重算,或把撤销事件推给持有会话的一方:RFC 7009 的令牌撤销,OpenID CAEP 的会话撤销事件 |
| 授权与内容的先后一致 | 不涉及 | Zanzibar 论文要求授权判定遵守用户操作的因果顺序,这是权限变更与内容变更的一致性,不是会话撤销 |
| 授权的有效期 | 个人授权的有效期,按企业要求在合同中约定 | 限时、按需授权,到期自动收回;NIST SP 800-53 的 AC-2 控制项含临时账户自动失效 |
| 权限复核 | 复核周期按企业要求在合同中约定 | 定期复核账户与授权,AC-2 同样要求 |
| 职责分离 | 四条路径一律剥离签核能力 | 控制项 AC-5 要求拆分关键职责 |
验收时可以问的问题
- 请对照撤销的决策表,演示同一项能力先加后减与先减后加,结果各是什么。
- 请演示:职位自带的能力被个人授权减掉,之后撤销这条减项,能力是否回来。