Skip to content

Commit e0cc722

Browse files
fix /challenges/:uuid
1 parent 1d0ca07 commit e0cc722

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

src/services/ChallengeService.js

+11-9
Original file line numberDiff line numberDiff line change
@@ -947,25 +947,27 @@ async function getChallenge (currentUser, id) {
947947
// }
948948
// delete challenge.typeId
949949

950-
// Check if challenge is task and apply security rules
951-
if (_.get(challenge, 'task.isTask', false) && _.get(challenge, 'task.isAssigned', false)) {
952-
if (!currentUser || (!currentUser.isMachine && !helper.hasAdminRole(currentUser) && _.toString(currentUser.userId) !== _.toString(_.get(challenge, 'task.memberId')))) {
953-
throw new errors.ForbiddenError(`You don't have access to view this challenge`)
954-
}
955-
}
956-
950+
let memberChallengeIds
957951
// Remove privateDescription for unregistered users
958952
if (currentUser) {
959953
if (!currentUser.isMachine) {
960-
const ids = await helper.listChallengesByMember(currentUser.userId)
961-
if (!_.includes(ids, challenge.id)) {
954+
memberChallengeIds = await helper.listChallengesByMember(currentUser.userId)
955+
if (!_.includes(memberChallengeIds, challenge.id)) {
962956
_.unset(challenge, 'privateDescription')
963957
}
964958
}
965959
} else {
966960
_.unset(challenge, 'privateDescription')
967961
}
968962

963+
// Check if challenge is task and apply security rules
964+
if (_.get(challenge, 'task.isTask', false) && _.get(challenge, 'task.isAssigned', false)) {
965+
const canAccesChallenge = _.isUndefined(currentUser) ? false : _.includes((memberChallengeIds || []), challenge.id) || currentUser.isMachine || helper.hasAdminRole(currentUser)
966+
if (!canAccesChallenge) {
967+
throw new errors.ForbiddenError(`You don't have access to view this challenge`)
968+
}
969+
}
970+
969971
if (challenge.phases && challenge.phases.length > 0) {
970972
await getPhasesAndPopulate(challenge)
971973
}

0 commit comments

Comments
 (0)