Archery
Archery copied to clipboard
终止工单报错:当前审批权限组不存在, 请联系管理员检查并清洗错误数据
重现步骤
1、A用户提交了sql上线工单; 2、B用户审核了工单,然后跳转到执行工单和终止流程的界面,此时B用户不想执行这个工单了,准备终止流程
3、B用户此时终止流程会报错:当前审批权限组不存在, 请联系管理员检查并清洗错误数据
4、说明:A用户属于RD组,B用户属于DBA组
预期外的结果
B用户此时终止流程会报错:当前审批权限组不存在, 请联系管理员检查并清洗错误数据
日志文本
tail -f /data0/archery/archery/logs/archery.log
2025-05-29 00:07:57,208 - MainThread:140525360711488 - task_id:default - sql_workflow.py:468 - ERROR - 取消工单报错,错误信息:Traceback (most recent call last):
File "/opt/archery/sql/utils/workflow_audit.py", line 426, in can_operate
audit_auth_group = Group.objects.get(id=self.audit.current_audit)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/venv4archery/lib/python3.11/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/venv4archery/lib/python3.11/site-packages/django/db/models/query.py", line 650, in get
raise self.model.DoesNotExist(
django.contrib.auth.models.Group.DoesNotExist: Group matching query does not exist.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/archery/sql/sql_workflow.py", line 466, in cancel
workflow_audit_detail = auditor.operate(action, request.user, audit_remark)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/archery/sql/utils/workflow_audit.py", line 450, in operate
self.can_operate(action, actor)
File "/opt/archery/sql/utils/workflow_audit.py", line 428, in can_operate
raise AuditException(
sql.utils.workflow_audit.AuditException: 当前审批权限组不存在, 请联系管理员检查并清洗错误数据
版本
v1.11.3
部署方式
Docker
是否还有其他可以辅助定位问题的信息?比如数据库版本等
No response
这确实是一个bug, 请看下面的逻辑
https://github.com/hhyo/Archery/blob/c647f07b9262452f04e159c7078ba83ec7c61889/sql/utils/workflow_audit.py#L423-L429
在审批完成时, 这里的 current_audit 应该为空, 所以无法找到对应的审批组去核实权限.
我在这里稍微说一下我的想法, 供实现时参考:
审批开始后, 工单执行前, 所有已经经过的审批节点, 还有提交人自己, 都可以终止工单, 如果审批流程已经全部完成, 只待执行, 那么所有审批节点和提交人均可终止工单.
我暂时没时间来实现这个检查, 但应该是相对比较简单的, 欢迎 pr