fix(worker): F08 执行/下载统一核验角色与账号状态,恢复卡死的 processing 任务
- worker 执行前重新核验账号 is_active 与 admin/analyst 角色:撤权/停用后排队任务 直接失败,不发布敏感工作簿 - formula-exports 状态与下载接口补齐与创建接口一致的角色白名单,被降为 viewer 的账号不能再查询/下载旧导出 - import_worker 对超过 15 分钟仍处于 processing 的任务重新认领(PostgreSQL 依赖 咨询锁立即恢复),崩溃重启不再无限停留 processing;新近 processing 不被抢占 - 测试:撤权/停用执行、viewer 下载与状态 403、半成品/缺文件下载 409/410、 超时任务恢复且无重复临时文件、新近 processing 不被重复认领
This commit is contained in:
@@ -652,6 +652,11 @@ def process_formula_export(export_id):
|
||||
created = []
|
||||
try:
|
||||
member = Membership.objects.get(user=job.user, organization=job.dataset.organization)
|
||||
# 执行阶段重新核验角色与账号状态:撤权或停用后排队中的任务不得继续发布敏感工作簿。
|
||||
if not job.user.is_active:
|
||||
raise PermissionError("账号已停用,公式导出已拒绝执行")
|
||||
if member.role not in ("admin", "analyst"):
|
||||
raise PermissionError("账号角色已变更,公式导出已拒绝执行")
|
||||
if set(member.departments) != set(job.departments):
|
||||
raise PermissionError("科室授权已变更,请重新提交导出")
|
||||
root = _validated_export_directory(Path(settings.MEDIA_ROOT) / "formula-exports", "公式导出目录")
|
||||
|
||||
Reference in New Issue
Block a user