跳转到内容

审批与约束规则

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

页面实体解决什么
审批中心 /approval/reviewSysReview + SysReviewLog通用的单据审批:某条业务数据要人来批一下
约束规则 /approval/constraintSysConstraintRule + SysConstraintRuleItemRBAC 约束引擎:授权本身合不合规

再加上第三套:工作流 处理多步骤、有分支、要等很久的流程。三者的选型见文末。

审批中心

SysReview 是一张通用审批单,特点是不绑定具体业务表——靠三个字段挂到任意业务对象上:

字段说明
ReviewCode / ReviewTitle单号与标题
ReviewType业务类型(字符串),由接入方定义
EntityType / EntityId指向被审批的业务对象(多态关联)
BusinessData提交时的业务数据快照(JSON)
ReviewContent / ReviewDescription内容与说明
ReviewStatusPending / 已通过 / 已拒绝 等
ReviewResult审批结果
Priority优先级
SubmitUserId / SubmitTime提交人与时间
CurrentReviewUserId当前处理人

SysReviewLog(按月分表)记录每一步的操作留痕。

接入方式

text
业务写侧
   │ 落业务表(状态=待审批)
   │ 建 SysReview:EntityType="Contract", EntityId=合同Id, BusinessData=快照JSON

审批人在审批中心处理 → 通过 / 拒绝 → 写 SysReviewLog

业务侧据审批结果回写业务表状态

BusinessData 快照的意义

审批发生在提交之后,中间业务数据可能已经被改。快照保证审批人看到的是提交那一刻的内容,也让事后追溯有据可查(「当时批的是什么」)。

代价是快照与当前数据可能不一致——通过后回写业务表时要考虑这一点,必要时做冲突检查。

与工作流的分工

审批中心是单步的:一个单子、一个(或一组)审批人、一次决定。

要多级审批、会签、条件分支、超时自动处理、并行分支汇合——用 工作流,它的 UserTask 活动天然支持或签/会签/依次审批与转办加签。

约束规则引擎

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

SysConstraintRule 的结构:

字段说明默认
RuleCode / RuleName规则编码与名称
ConstraintType约束类型(见下表)SSD
TargetType约束对象类型(角色 / 权限 / …)Role
Parameters规则参数(JSON),不同类型含义不同
ViolationAction违规时怎么处理(见下表)Deny
Priority优先级0
EffectiveTime / ExpirationTime生效时间窗
Status启停Enabled

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

八类约束

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

四种违规处理

动作效果
Deny 拒绝0直接阻断,授权/操作失败
Warning 警告1放行但提示
Log 记录日志2静默放行,只留痕
RequireApproval 转审批3转成审批流程,批了才生效

上线新规则的姿势

直接上 Deny 风险很大——存量数据里往往已经有一批违规状态,一开就把人挡在外面。

推荐路径:先用 Log 跑一段时间,从日志里看有多少违规、都是谁;清理完存量后改成 Warning 观察;确认干净了再切 Deny

违规检查发生在授权时,不是登录时

约束规则参与的是「能不能把这个角色/权限授给这个人」以及请求期的判定链。已经授出去的存量违规组合不会自动回收——要清理得跑一次巡检。

三套机制怎么选

你的需求用哪套
一条业务数据要人批一下,一步搞定审批中心 SysReview
多级/会签/分支/超时/并行的长流程工作流
「谁不能同时拥有哪些角色」这类合规规则约束规则引擎
用户主动申请某个权限,管理员审批权限申请SysPermissionRequest,见 权限模型

它们可以组合:约束规则的 RequireApproval 就是把违规转成审批单;工作流的 UserTask 也可以承载复杂的权限审批流。

相关页面

Released under The MIT License