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