fix(bpm): 超级管理员始终可维护流程模型,修复「你不是该流程的管理员」死锁
问题:流程模型 → 修改 → 保存/发布 报
「操作流程失败,原因:你不是该流程(合同审批)的管理员」,
且无法自愈(怎么改都报同样错误)。
根因:BpmModelServiceImpl.validateModelManager 校验的是数据库中【现有模型】的
managerUserIds,而不是请求里传的新值。历史模型的该字段存在三种脏数据:
- NULL / [](审批模型建好但从没存过管理员)
- 指向已被删除的用户
严格校验会让这些模型彻底变成「无主」,任何账号(包括超级管理员)都改不了,
前端即便提交了正确的新管理员也永远写不进去 —— 死锁。
改动:validateModelManager 增加超级管理员短路:
若当前登录用户是 super_admin,直接放行,不再校验 managerUserIds。
该方法是 updateModel / deployModel / deleteModel / updateModelState /
updateModelSortBatch 等 7 处的统一入口,改一处全部生效。
配套:
- 客户要求「流程管理员固定为超级管理员」,此校验对超管本就不应生效。
- 另有 REV_ 为 NULL 导致保存 500(FlowableOptimisticLockingException)的数据问题,
见 sql/mysql/fix_act_re_model_rev_null.sql。
验证(北方科技 mom-bfkj 实测):
- 「合同审批」managerUserIds=[] → 保存成功,落库为 [1],REV_ 1→2
- 发布接口不再报管理员错误,走到后续业务校验(流程表单未配置,属正常提示)