Archery icon indicating copy to clipboard operation
Archery copied to clipboard

终止工单报错:当前审批权限组不存在, 请联系管理员检查并清洗错误数据

Open czxin788 opened this issue 7 months ago • 1 comments

重现步骤

1、A用户提交了sql上线工单; 2、B用户审核了工单,然后跳转到执行工单和终止流程的界面,此时B用户不想执行这个工单了,准备终止流程

Image 3、B用户此时终止流程会报错:当前审批权限组不存在, 请联系管理员检查并清洗错误数据

Image

4、说明:A用户属于RD组,B用户属于DBA组

预期外的结果

B用户此时终止流程会报错:当前审批权限组不存在, 请联系管理员检查并清洗错误数据

Image

日志文本

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

czxin788 avatar May 28 '25 16:05 czxin788

这确实是一个bug, 请看下面的逻辑

https://github.com/hhyo/Archery/blob/c647f07b9262452f04e159c7078ba83ec7c61889/sql/utils/workflow_audit.py#L423-L429

在审批完成时, 这里的 current_audit 应该为空, 所以无法找到对应的审批组去核实权限.

我在这里稍微说一下我的想法, 供实现时参考:

审批开始后, 工单执行前, 所有已经经过的审批节点, 还有提交人自己, 都可以终止工单, 如果审批流程已经全部完成, 只待执行, 那么所有审批节点和提交人均可终止工单.

我暂时没时间来实现这个检查, 但应该是相对比较简单的, 欢迎 pr

LeoQuote avatar May 29 '25 09:05 LeoQuote