@@ -947,25 +947,27 @@ async function getChallenge (currentUser, id) {
947
947
// }
948
948
// delete challenge.typeId
949
949
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
957
951
// Remove privateDescription for unregistered users
958
952
if ( currentUser ) {
959
953
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 ) ) {
962
956
_ . unset ( challenge , 'privateDescription' )
963
957
}
964
958
}
965
959
} else {
966
960
_ . unset ( challenge , 'privateDescription' )
967
961
}
968
962
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
+
969
971
if ( challenge . phases && challenge . phases . length > 0 ) {
970
972
await getPhasesAndPopulate ( challenge )
971
973
}
0 commit comments