Skip to content

权限申请与权限治理 ​

权限域负责策略、申请、授权和复核,工作流负责审批编排。权限申请使用发起工作台中的自定义表单;customForm.businessType = identity.access_request 标识内置业务适配器,React 组件路径只用于渲染。

申请、审批与发放 ​

提交前,服务端展开所选角色权限包和操作权限,读取所属租户的有效策略,校验套餐范围、有效期和重复申请,解析实际审批人。预览与提交使用同一个评估服务。预览明确返回待选择、不可提交或可提交;提交携带预览指纹,并在保存事务中再次校验角色版本、策略、组织与审批计划。变化后必须重新预览确认。

提交事务同时保存权限申请、权限项快照、策略版本、审批计划、流程关联和通知 Outbox。角色申请展开为当时的权限包快照,不会永久绑定角色,角色以后增加的权限也不会追溯加入临时授权。

审批策略实际办理链
策略自动批准无人工节点,提交后进入授权发放
部门负责人申请人所属部门的有效负责人
部门负责人 + 安全审批部门负责人及一名独立安全审批人
部门负责人 + 两名独立安全审批部门负责人及两名不同的安全审批人

安全审批候选按安全管理员、租户管理员、平台管理员的角色优先级及用户 ID 确定,支持有效用户组角色。候选人必须处于正确租户、账号和角色启用状态,并具有审批办理能力。负责人不能是申请人;安全审批人不能与申请人、负责人或其它独立节点重复。

转办、委派和管理员改派仍需满足上述身份和独立性。部门负责人节点不能交给普通成员;安全节点可交给其它有效且独立的安全审批人。

审批时再次检查有效期、策略版本、组织关系和人员存活。要求 MFA 的审批必须提供操作者本人的当次认证器验证码;验证码不写入业务数据或操作日志,业务审计只记录验证时间。不能通过批量审批、外部回调或通用流程管理绕过领域校验。

审批终态在事务中回写申请;通过后入队 access_grant_apply 可靠作业。授权发放有业务唯一约束、租约保护、幂等和失败原因,不能用工作流「已通过」代替权限「已可用」。

两组独立状态 ​

对象状态
申请审批草稿、待审批、已通过、已驳回、已取消
发放执行未开始、待执行、执行中、成功、失败、已终止
授权项待生效、生效、过期、撤销

临时故障由作业自动重试,最终失败可从治理页重新发放;策略变化、过期或审批身份失效等业务校验失败终止发放,必须重新申请。待审批申请由对账任务核验,失效后同步取消流程任务、释放申请预约并记录原因。管理员取消发放作业后,发放状态为终止,不会隐式重新授权。

权限申请实例属于授权审计依据,不支持直接删除。回收权限使用授权撤销或复核处置。

有效策略 ​

共享权限目录定义最低风险和控制要求。数据库策略可提供租户覆盖,但不能降低目录底线:

  • 高危权限至少经过部门负责人和安全审批,复核周期不超过 90 天。
  • 极高危权限要求两名独立安全审批、MFA,复核周期不超过 30 天。
  • 永久与紧急授权必须由有效策略显式允许;紧急授权还受独立时长上限约束。治理控制面能力不允许本人自助申请。
  • 如管理员为限时申请显式配置时长策略,限时申请使用最短的已配置上限;该值不作为永久授权的隐式失效时间。
  • 多项权限合并时采用最高风险、最严格审批和 MFA 要求的并集。
  • 未在权限目录登记的权限不能申请。管理身份角色不能作为临时权限包申请。

策略保存会产生版本;内容未变化的保存不增加版本。审批和发放发现快照与当前有效策略不同,会要求按新策略重新申请。策略修改约束后续审批、发放和延期;已发放授权按自身有效期限执行,立即收回时应执行撤销。

本人申请显式选择「限时有效」或「永久有效」。限时授权填写晚于当前时间和开始时间的失效时刻;永久授权不填写失效时刻,API 与数据库均以 expiresAt = null 表示,不能将限时表单漏填误认为永久。普通限时申请按策略配置上限;紧急申请同时取普通上限与紧急上限的较小值,禁止紧急永久授权,仍完成对应审批与 MFA。永久授权仍可撤销,并参加策略规定的周期复核。

立即生效由服务器确定开始时刻;预约生效必须指定未来时刻。授权从审批和发放完成后才可使用;限时申请的截止时间不会因审批等待自动顺延。

API 时间遵循项目统一格式 YYYY-MM-DD HH:mm:ss,由公共日期工具和 APP_TIME_ZONE 解释;数据库时刻列使用 timestamptz。不要自行截断 UTC 字符串来构造当地时间。

逐项授权与实际鉴权 ​

一张授权记录保留申请来源;其下每个操作权限及数据范围都有独立授权项、有效期、策略快照和撤销状态。同一个操作的不同数据范围不会被错误合并到整张授权上。相同权限码与范围合并为一条授权项,保留所有来源及角色版本;页面分别展示去重权限数和授权范围条数。

实际鉴权同时检查:

  1. 授权和授权项未撤销,且服务器当前时刻处于该项有效窗口。
  2. 权限码已在代码权限目录登记;角色版本、直接授权及审批授权按权限码与数据范围产生有效能力,菜单仅投影导航,不参与权限内容的定义。
  3. 所属租户和套餐范围有效。

数据权限按本次已通过路由门禁的操作权限计算,只合并真正授予该操作的角色和临时授权范围。不同来源的合法范围取并集;一个操作的临时 all 不会扩散为其它操作的全量数据权限。后台调用需要临时数据范围时,应显式传入相应操作权限。

权限缓存包含每项授权的下一个时间边界,到期后不能继续复用旧权限。数据库变更广播清理各节点本地副本;业务变更完成后清理共享缓存并通过 identity:permissions-changed 通知受益用户。周期扫描维护展示状态和通知,不能代替实际请求中的时间校验。

权限复核 ​

创建批次后先进入准备中,由 access_review_build 作业按用户分批采集来源、持久化游标和快照。失败可重试,不重复插入来源。准备结束时无复核项的批次直接完成,其余进入待处理;准备过程中不能办理不完整的批次。

复核范围支持租户、部门及子部门、直接角色、用户组、指定用户、高危来源和临时授权。来源粒度必须明确:

来源复核和撤销单位
直接角色该用户的整个角色绑定
用户组资格该用户的整个用户组成员资格,含组内继承角色
直接授权指定用户的一项直接操作授权
临时授权一项独立的权限及数据范围授权,不误撤其它项

动态用户组由源规则物化,不能假装通过删除一行成员记录永久撤销资格。遇到动态组撤销,应升级给组负责人调整源规则,再完成复核,避免下次同步自动恢复。

决策实际结果
保留记录依据,并根据策略安排下次复核
撤销删除指定来源绑定或撤销具体临时授权项;保留其它合法来源
延期仅适用于仍有效的临时授权项,必须提供更晚的到期时间,校验当前策略、累计时长及新增时间段是否重叠
限期例外必须指定独立责任人和期限,期限不能超过策略复核周期,到期再次进入复核
升级处理指定另一名具备办理权限的独立负责人及新截止时间;复核项继续待处理,保留流转历史

只有指定负责人或平台管理者可以办理复核,不能保留自己的权限。高风险保留、延期或例外按有效策略执行 MFA。每次处置和权限副作用在同一事务中完成,记录操作者、策略、MFA 时间及理由。最后一项完成后批次自动关闭;超期保持可见。

角色复核撤销平台管理员身份时,必须保留至少一名有效平台管理员,并回收被撤销者的现有会话。内置 admin 账号的超级管理员角色不可移除。保留、延期或例外前重新读取授权来源;来源内容或范围变化时更新快照并要求刷新确认。

后台任务与通知 ​

  • identity-access-lifecycle:每分钟维护授权项激活、过期、缓存刷新和到期通知。
  • identity-access-reconcile:每五分钟核对未完成的审批及授权关联。
  • identity-access-review-due:每五分钟维护截止状态,安排到期复审与限期例外后的再复核。
  • identity-access-review-scan:每日扫描首次达到策略周期的权限来源。

所有任务在各进程角色中声明,仅由 worker 执行。通知统一通过 notifyWithin() 与业务同事务写入 Outbox,再由统一派发层处理渠道、偏好、免打扰和投递留痕。

用户管理边界 ​

用户编辑保留原有双列表单,部门、岗位、角色按相应管理权限开放;允许有管理权限者修改本人。资料、组织和角色命令分别鉴权,在同一个事务内保存。普通资料更新接口拒绝角色、组织及状态字段,不能通过资料编辑绕过授权门禁。内置 admin 账号的超级管理员角色受用户编辑、角色成员维护和复核入口共同保护。

权限缓存使用共享失效代次,防止撤权前的并发读取写回旧权限。Redis 或失效监听不可用时直接读取数据库;角色、用户组、直接授权、临时授权与导航变化均触发失效。

Built with VitePress for local documentation preview.