@@ -392,11 +392,46 @@ async function getM2MToken () {
392
392
*/
393
393
async function getChallengeResources ( challengeId ) {
394
394
const token = await getM2MToken ( )
395
- const url = `${ config . RESOURCES_API_URL } ?challengeId=${ challengeId } `
396
- const res = await axios . get ( url , { headers : { Authorization : `Bearer ${ token } ` } } )
395
+ const perPage = 100
396
+ let page = 1
397
+ let result = [ ]
398
+ while ( true ) {
399
+ const url = `${ config . RESOURCES_API_URL } ?challengeId=${ challengeId } &perPage=${ perPage } &page=${ page } `
400
+ const res = await axios . get ( url , { headers : { Authorization : `Bearer ${ token } ` } } )
401
+ if ( ! res . data || res . data . length === 0 ) {
402
+ break
403
+ }
404
+ result = result . concat ( res . data )
405
+ page += 1
406
+ if ( res . headers [ 'x-total-pages' ] && page > Number ( res . headers [ 'x-total-pages' ] ) ) {
407
+ break
408
+ }
409
+ }
410
+ return result
411
+ }
412
+
413
+ /**
414
+ * Get resource roles
415
+ * @returns {Promise<Array> } the challenge resources
416
+ */
417
+ async function getResourceRoles ( ) {
418
+ const token = await getM2MToken ( )
419
+ const res = await axios . get ( config . RESOURCE_ROLES_API_URL , { headers : { Authorization : `Bearer ${ token } ` } } )
397
420
return res . data || [ ]
398
421
}
399
422
423
+ /**
424
+ * Check if a user has full access on a challenge
425
+ * @param {String } challengeId the challenge UUID
426
+ * @param {String } userId the user ID
427
+ */
428
+ async function userHasFullAccess ( challengeId , userId ) {
429
+ const resourceRoles = await getResourceRoles ( )
430
+ const rolesWithFullAccess = _ . map ( _ . filter ( resourceRoles , r => r . fullAccess ) , 'id' )
431
+ const challengeResources = await getChallengeResources ( challengeId )
432
+ return _ . filter ( challengeResources , r => _ . toString ( r . memberId ) === _ . toString ( userId ) && _ . includes ( rolesWithFullAccess , r . roleId ) ) . length > 0
433
+ }
434
+
400
435
/**
401
436
* Get all user groups
402
437
* @param {String } userId the user id
@@ -723,5 +758,7 @@ module.exports = {
723
758
getProjectBillingAccount,
724
759
expandWithSubGroups,
725
760
getCompleteUserGroupTreeIds,
726
- expandWithParentGroups
761
+ expandWithParentGroups,
762
+ getResourceRoles,
763
+ userHasFullAccess
727
764
}
0 commit comments