From 59e8f23370ee1101e82d661e41b95aaf29a90e98 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 31 Jan 2026 18:32:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=80=E7=BA=A7=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E5=8F=91=E8=B5=B7=E4=BA=BA=E5=8F=AF=E4=BB=A5=E8=AF=84=E5=88=86?= =?UTF-8?q?=E5=92=8C=E5=A1=AB=E5=86=99=E5=95=86=E5=93=81ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:一级需求部门成员发布任务完结后无法评分和填写商品ID 原因:权限判断只检查publisherId,未考虑primaryPublisherId和detailCompleterId 修复: - 前端:isTaskPublisher和canManageProducts函数增加对一级需求发起人和明细完善人的判断 - 后端:rateTask方法增加对primaryPublisherId和detailCompleterId的权限验证 Co-authored-by: Cursor --- .../java/com/designhub/service/TaskService.java | 9 ++++++--- frontend/src/views/TaskHall.vue | 16 +++++++++++++--- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/TaskService.java b/backend/src/main/java/com/designhub/service/TaskService.java index 28d113d..7d4675d 100644 --- a/backend/src/main/java/com/designhub/service/TaskService.java +++ b/backend/src/main/java/com/designhub/service/TaskService.java @@ -2550,9 +2550,12 @@ public class TaskService { Task task = getTaskById(taskId); - // 验证权限(必须是任务发布人) - if (!userId.equals(task.getPublisherId())) { - throw new BusinessException(ResultCode.FORBIDDEN, "只有任务发布人可以评分"); + // 验证权限(必须是任务发布人、一级需求发起人或明细完善人) + boolean isPublisher = userId.equals(task.getPublisherId()); + boolean isPrimaryPublisher = userId.equals(task.getPrimaryPublisherId()); + boolean isDetailCompleter = userId.equals(task.getDetailCompleterId()); + if (!isPublisher && !isPrimaryPublisher && !isDetailCompleter) { + throw new BusinessException(ResultCode.FORBIDDEN, "只有任务发布人、一级需求发起人或明细完善人可以评分"); } // 验证任务状态(必须是已完成) diff --git a/frontend/src/views/TaskHall.vue b/frontend/src/views/TaskHall.vue index 992727a..76c7d33 100644 --- a/frontend/src/views/TaskHall.vue +++ b/frontend/src/views/TaskHall.vue @@ -5174,10 +5174,16 @@ const canCompleteTask = (task: TaskOrSubTask) => { return task.receiverId === userInfo.id && (task.progress || 0) >= 100 } -// 判断是否是任务发布人 +// 判断是否是任务发布人(包括一级需求发起人) const isTaskPublisher = (task: TaskOrSubTask) => { const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}') - return task.publisherId === userInfo.id + // 普通发起人 + if (task.publisherId === userInfo.id) return true + // 一级需求发起人 + if ((task as any).primaryPublisherId === userInfo.id) return true + // 明细完善人 + if ((task as any).detailCompleterId === userInfo.id) return true + return false } // 显示评分弹窗 @@ -5933,13 +5939,17 @@ const loadTaskProducts = async (taskId: number) => { } } -// 判断是否可以管理商品ID(任务发起者或管理员) +// 判断是否可以管理商品ID(任务发起者、一级需求发起人、明细完善人或管理员) const canManageProducts = (task: TaskOrSubTask) => { const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}') // 管理员可以管理 if (userInfo.isAdmin === 1 || userInfo.isAdmin === true) return true // 任务发起者可以管理 if (task.publisherId && task.publisherId === userInfo.id) return true + // 一级需求发起人可以管理 + if ((task as any).primaryPublisherId && (task as any).primaryPublisherId === userInfo.id) return true + // 明细完善人可以管理 + if ((task as any).detailCompleterId && (task as any).detailCompleterId === userInfo.id) return true return false }