@@ -914,6 +914,30 @@ async function listChallengesByMember (memberId) {
914914 return allIds
915915}
916916
917+ /**
918+ * Lists resources that given member has in the given challenge.
919+ * @param {Number } memberId the member id
920+ * @param {String } id the challenge id
921+ * @returns {Promise<Array> } an array of resources.
922+ */
923+ async function listResourcesByMemberAndChallenge ( memberId , challengeId ) {
924+ const token = await getM2MToken ( )
925+ let response = { }
926+ try {
927+ response = await axios . get ( config . RESOURCES_API_URL , {
928+ headers : { Authorization : `Bearer ${ token } ` } ,
929+ params : {
930+ memberId,
931+ challengeId
932+ }
933+ } )
934+ } catch ( e ) {
935+ logger . debug ( `Failed to get resources on challenge ${ challengeId } that memberId ${ memberId } has` , e )
936+ }
937+ const result = response . data || [ ]
938+ return result
939+ }
940+
917941/**
918942 * Check if ES refresh method is valid.
919943 *
@@ -1056,16 +1080,15 @@ async function ensureAccessibleByGroupsAccess (currentUser, challenge) {
10561080 * @param {Object } challenge the challenge to check
10571081 */
10581082async function _ensureAccessibleForTaskChallenge ( currentUser , challenge ) {
1059- let challengeResourceIds
1083+ let memberResources
10601084 // Check if challenge is task and apply security rules
10611085 if ( _ . get ( challenge , 'task.isTask' , false ) && _ . get ( challenge , 'task.isAssigned' , false ) ) {
10621086 if ( currentUser ) {
10631087 if ( ! currentUser . isMachine ) {
1064- const challengeResources = await getChallengeResources ( challenge . id )
1065- challengeResourceIds = _ . map ( challengeResources , r => _ . toString ( r . memberId ) )
1088+ memberResources = await listResourcesByMemberAndChallenge ( currentUser . userId , challenge . id )
10661089 }
10671090 }
1068- const canAccesChallenge = _ . isUndefined ( currentUser ) ? false : currentUser . isMachine || hasAdminRole ( currentUser ) || _ . includes ( ( challengeResourceIds || [ ] ) , _ . toString ( currentUser . userId ) )
1091+ const canAccesChallenge = _ . isUndefined ( currentUser ) ? false : currentUser . isMachine || hasAdminRole ( currentUser ) || ! _ . isEmpty ( memberResources )
10691092 if ( ! canAccesChallenge ) {
10701093 throw new errors . ForbiddenError ( `You don't have access to view this challenge` )
10711094 }
@@ -1287,6 +1310,7 @@ module.exports = {
12871310 ensureProjectExist,
12881311 calculateChallengeEndDate,
12891312 listChallengesByMember,
1313+ listResourcesByMemberAndChallenge,
12901314 validateESRefreshMethod,
12911315 getProjectDefaultTerms,
12921316 validateChallengeTerms,
0 commit comments