生态产品多个设计器现已发布候选版本

查看生态总览
跳转到内容

审批与约束规则 ​

菜单目录 /approval 下有两个页面,它们解决的是不同的问题,容易混淆:

页面归属解决什么
审批中心 /approval/center工作流模块单据审批:业务数据要人来批,一步或多级
约束规则 /approval/constraintSaas(SysConstraintRule + SysConstraintRuleItem)RBAC 约束引擎:授权本身合不合规

审批中心 ​

审批统一走 工作流:业务单据按「业务编码 = 流程编码、单据主键 = 实例业务相关性标识」挂到流程上,审批人按角色、部门、岗位、发起人主管等规则解析,在审批中心的「待我审批」里办理,流程结束时回调业务回写单据。

一步审批就是只有一个人工任务节点的流程;多级、会签、条件分支、超时自动处理、并行汇合都在同一套机制里,改流程只需在设计器里发新版本。业务怎么接入见 工作流 · 审批业务接入。

5.8.0 起不再有「系统审查」

早先 Saas 自带的通用审批单 SysReview / SysReviewLog 已撤掉,权限申请改由工作流审批。升级脚本删除两张旧表;存量的待审批权限申请没有对应流程,统一置为已撤回,申请人重新提交即走新流程。

约束规则引擎 ​

这套东西管的不是业务数据,而是权限本身:判断一次授权是否违反组织的合规规则。

当前只执行静态职责分离(SSD)

规则可以按下面八类维护,但真正有代码评估的只有 SSD(目标为角色的规则),在三条授权写入路径上执行:分配角色(含角色成员批量调整、让绑定重新生效的改状态 / 改有效期)、调整角色继承、审批通过带角色的权限申请。其余类型目前只是可维护的规则数据,不会拦截任何操作;规则也不参与请求期鉴权。

SysConstraintRule 的结构:

字段说明默认
RuleCode / RuleName规则编码与名称—
ConstraintType约束类型(见下表)SSD
TargetType约束对象类型(角色 / 权限 / …)Role
Parameters规则参数(JSON);SSD 读 maxAllowed:同组内最多同时持有几个目标,缺省 1—
ViolationAction违规时怎么处理(见下表)Deny
Priority优先级0
EffectiveTime / ExpirationTime生效时间窗—
Status启停Enabled

SysConstraintRuleItem 是规则的目标项集合(如「这三个角色互斥」里的那三个角色)。

八类约束 ​

类型值含义典型场景当前是否执行
SSD 静态职责分离0一个用户不能同时被授予这组角色「制单员」与「审核员」不能是同一人执行(见上)
DSD 动态职责分离1可以都有,但同一会话内不能同时激活平时可切换身份,单次操作只能用一个不执行:会话角色激活尚无写入口
互斥约束2指定对象互相排斥两个权限不能共存不执行
基数约束3数量上限「超级管理员最多 3 人」不执行;限制角色人数请用角色的成员上限 MaxMembers
先决条件4授予 A 前必须先有 B给「财务审批」前必须先有「财务查看」不执行
时间约束5只在特定时间窗内有效临时权限只在项目期内不执行;授权绑定自带生效 / 失效时间
位置约束6按 IP 限制财务操作只能在办公网不执行
自定义99扩展点—不执行

SSD 评估时展开角色继承链:规则指向角色 A,任何继承了 A 的角色都视为持有 A;停用的角色同样计入(随时可能重新启用)。

四种违规处理 ​

动作值当前效果
Deny 拒绝0直接阻断,整次授权写入失败,错误信息带规则编码、名称与冲突角色主键
Warning 警告1放行,写一条 Warning 级应用日志;不会提示操作人
Log 记录日志2放行,同样写一条 Warning 级应用日志
RequireApproval 需审批3与 Deny 相同,直接阻断;不会生成审批单,也不会转入审批流程

上线新规则的姿势

直接上 Deny 风险很大——存量数据里往往已经有一批违规状态,一开就挡住相关人员之后的角色调整。

推荐路径:先用 Log(或 Warning,两者效果相同)跑一段时间,从应用日志里看有哪些授权命中了规则;清理完存量后再切 Deny。

违规检查发生在授权写入时,不是登录或请求时

约束规则只回答「能不能把这个角色授给这个人」,不参与请求期的鉴权判定。已经授出去的存量违规组合不会自动回收,系统也没有内置巡检,需要自行排查清理。

怎么选 ​

你的需求用哪套
业务单据要人批(一步或多级、会签、分支、超时)审批中心(由 工作流 承载)
「谁不能同时拥有哪些角色」这类合规规则约束规则引擎
用户主动申请某个权限,管理员审批权限申请(SysPermissionRequest,提交即发起审批流,见 权限模型)

约束规则与审批彼此独立:约束规则的 RequireApproval 不会发起审批,命中即阻断;需要「违规转审批」时,可让申请人走权限申请,审批通过授予时同样会做 SSD 校验。

相关页面 ​

Released under The MIT License