Skip to main content

规格 · 身份与权限

适用范围​

约束所有功能的角色、作用域、权限判定时机与表达方式。

不约束:凭据的存储与轮换实现;界面如何呈现按钮(由各功能的表现设计决定);具体角色的业务语义(由各功能定义,但必须落在本规格的层级与判定规则内)。

规范条款​

作用域层级​

  1. 权限作用域必须落在下列层级之一,且必须显式声明:
层级说明
工作空间级跨项目;影响整个工作空间
项目级限定在单一项目
对象级限定在单一对象(工作项、页面等)
  1. 必须不存在"跨工作空间"的权限;跨工作空间的访问必须被拒绝。
  2. 子层级权限必须不自动获得父层级权限;反向亦然——必须按声明的层级判定。

身份类型​

  1. 身份必须区分为下列类型,且必须不互相冒充:
类型可用于必须不可用于
人类成员按角色的业务操作服务间调用
服务身份该服务被授权的作用域代替人类做业务判断
外部协作者被显式授予的最小范围管理类操作
  1. 人类成员身份必须不被当作执行器选择或指派目标使用;身份的变化必须不改变已有的执行事实。

判定时机与权威​

  1. 权限必须在服务端、在每次请求时判定;必须不依赖客户端声明的权限。
  2. 判定必须基于请求时的当前状态;状态变化后必须重新判定,必须不沿用请求发起时的判定结果。
  3. 服务端必须返回派生的是否可执行判定;客户端必须不自行推断可用性。
  4. 权限判定必须不受缓存影响:失效的授权必须在下一次请求即失效。

非成员与不存在​

  1. 对无权限与对象不存在,必须返回同形结果;必须不泄漏对象是否存在。
  2. 权限不足时必须停止;必须不通过替换操作或降级路径达成同一效果。

授权与批准分离​

  1. 业务操作权限与批准权限(对不可逆动作的放行)必须分离;必须不由同一次授权同时覆盖。
  2. 不可逆动作必须停在明确的批准门之前(例如首次安装、激活、凭据创建与轮换、生产变更、破坏性数据操作)。
  3. 批准必须可追溯:必须记录批准人、时间与范围。
  4. 批准必须不被泛化:一次批准必须不自动覆盖其它对象、其它作用域或后续操作。

表达要求​

  1. 每个功能必须在能力面提供权限矩阵,列明每个角色能否执行每个操作;缺矩阵即视为未完成。
  2. 权限矩阵必须覆盖"操作在某状态下不可执行"的情形,并必须说明原因类别(无权限 / 状态不允许 / 前置缺失)。

违反时的失败语义​

违反情形必须的行为
缺权限矩阵视为规格违反;评审阶段必须拦截
客户端自行判断可用性必须改为服务端派生;否则会出现绕过判定的路径
权限不足却泄漏存在性必须改为同形返回
权限被缓存后仍生效必须改为每次判定
服务身份代替人类做业务判断必须拆分为两条路径
一次批准被泛化必须按对象与作用域重新批准

校验方式​

校验对象判据失败表现
矩阵完备每个操作必须能在权限矩阵中定位到角色判定缺失即失败
服务端判定构造客户端声明的宽松权限不得影响结果影响即失败
当前状态判定使状态变化后以原判定执行必须被拒绝被接受即失败
非成员同形非成员访问与不存在必须返回同形结果可区分即失败
身份隔离服务身份不得执行人类业务操作,反向亦然可执行即失败
批准可追溯不可逆动作必须能定位到批准人、时间与范围缺失即失败
授权失效撤销授权后下一次请求必须即失效仍生效即失败

相关规格​