fix: 一级需求发起人可以评分和填写商品ID

问题:一级需求部门成员发布任务完结后无法评分和填写商品ID
原因:权限判断只检查publisherId,未考虑primaryPublisherId和detailCompleterId

修复:
- 前端:isTaskPublisher和canManageProducts函数增加对一级需求发起人和明细完善人的判断
- 后端:rateTask方法增加对primaryPublisherId和detailCompleterId的权限验证

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Your Name 2026-01-31 18:32:27 +08:00
parent 01f0e3e3dc
commit 59e8f23370
2 changed files with 19 additions and 6 deletions

View File

@ -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, "只有任务发布人、一级需求发起人或明细完善人可以评分");
}
// 验证任务状态(必须是已完成)

View File

@ -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
}