@@ -392,11 +392,46 @@ async function getM2MToken () {
392392 */
393393async function getChallengeResources ( challengeId ) {
394394 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 } ` } } )
397420 return res . data || [ ]
398421}
399422
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+
400435/**
401436 * Get all user groups
402437 * @param {String } userId the user id
@@ -723,5 +758,7 @@ module.exports = {
723758 getProjectBillingAccount,
724759 expandWithSubGroups,
725760 getCompleteUserGroupTreeIds,
726- expandWithParentGroups
761+ expandWithParentGroups,
762+ getResourceRoles,
763+ userHasFullAccess
727764}
0 commit comments