diff --git a/website/server/controllers/api-v3/tasks.js b/website/server/controllers/api-v3/tasks.js index 7d9a16a8a9..09b3e21971 100644 --- a/website/server/controllers/api-v3/tasks.js +++ b/website/server/controllers/api-v3/tasks.js @@ -815,7 +815,17 @@ api.moveTask = { const group = await getGroupFromTaskAndUser(task, user); const challenge = await getChallengeFromTask(task); - verifyTaskModification(task, user, group, challenge, res); + if (task.group.id && !task.userId) { + if (!group || user.guilds.concat(user.party._id).indexOf(group._id) === -1) { + throw new NotFound(res.t('groupNotFound')); + } + if (task.group.assignedUsers.length !== 0 + && task.group.assignedUsers.indexOf(user._id) === -1) { + throw new BadRequest('Use /group/:groupId/tasks/:taskId/move/to/:position route'); + } + } else { + verifyTaskModification(task, user, group, challenge, res); + } if (task.type === 'todo' && task.completed) throw new BadRequest(res.t('cantMoveCompletedTodo')); diff --git a/website/server/libs/tasks/index.js b/website/server/libs/tasks/index.js index 30873a7e88..a74303344b 100644 --- a/website/server/libs/tasks/index.js +++ b/website/server/libs/tasks/index.js @@ -328,13 +328,8 @@ function verifyTaskModification (task, user, group, challenge, res) { if (!task) { throw new NotFound(res.t('messageTaskNotFound')); } else if (task.group.id && !task.userId) { - if (!group || user.guilds.concat(user.party._id).indexOf(group._id) === -1) { - throw new NotFound(res.t('groupNotFound')); - } - if (task.group.assignedUsers.length !== 0 - && task.group.assignedUsers.indexOf(user._id) === -1) { - throw new BadRequest('Use /group/:groupId/tasks/:taskId/move/to/:position route'); - } + if (!group) throw new NotFound(res.t('groupNotFound')); + if (canNotEditTasks(group, user)) throw new NotAuthorized(res.t('onlyGroupLeaderCanEditTasks')); // If the task belongs to a challenge make sure the user has rights } else if (task.challenge.id && !task.userId) {