@@ -914,6 +914,30 @@ async function listChallengesByMember (memberId) {
914
914
return allIds
915
915
}
916
916
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
+
917
941
/**
918
942
* Check if ES refresh method is valid.
919
943
*
@@ -1056,16 +1080,15 @@ async function ensureAccessibleByGroupsAccess (currentUser, challenge) {
1056
1080
* @param {Object } challenge the challenge to check
1057
1081
*/
1058
1082
async function _ensureAccessibleForTaskChallenge ( currentUser , challenge ) {
1059
- let challengeResourceIds
1083
+ let memberResources
1060
1084
// Check if challenge is task and apply security rules
1061
1085
if ( _ . get ( challenge , 'task.isTask' , false ) && _ . get ( challenge , 'task.isAssigned' , false ) ) {
1062
1086
if ( currentUser ) {
1063
1087
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 )
1066
1089
}
1067
1090
}
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 )
1069
1092
if ( ! canAccesChallenge ) {
1070
1093
throw new errors . ForbiddenError ( `You don't have access to view this challenge` )
1071
1094
}
@@ -1287,6 +1310,7 @@ module.exports = {
1287
1310
ensureProjectExist,
1288
1311
calculateChallengeEndDate,
1289
1312
listChallengesByMember,
1313
+ listResourcesByMemberAndChallenge,
1290
1314
validateESRefreshMethod,
1291
1315
getProjectDefaultTerms,
1292
1316
validateChallengeTerms,
0 commit comments