@@ -46,6 +46,15 @@ const handleSuperAdminAccess = (
4646 userAuthClaims : string [ ]
4747) : boolean => userAuthClaims . includes ( ROLES . SUPER_ADMIN ) ;
4848
49+ /**
50+ * Helper: handles global privileged access rules for VolunteerAdmin.
51+ * - VolunteerAdmin: full access
52+ * Returns true if the request has been fully handled (next() called or response sent), otherwise false.
53+ */
54+ const handleVolunteerAdminAccess = (
55+ userAuthClaims : string [ ]
56+ ) : boolean => userAuthClaims . includes ( ROLES . VOLUNTEER_ADMIN ) ;
57+
4958/**
5059 * Helper: validates that user roles are properly configured
5160 * - AuthClaims must not be empty
@@ -251,8 +260,8 @@ export const requireOrganisationByKeyAccess = asyncHandler(async (req: Request,
251260
252261 const userAuthClaims = req . user ?. AuthClaims || [ ] ;
253262
254- // SuperAdmin global rule
255- if ( handleSuperAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
263+ // SuperAdmin or VolunteerAdmin global rule
264+ if ( handleSuperAdminAccess ( userAuthClaims ) || handleVolunteerAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
256265
257266 // For operations on specific organisations, check access based on role
258267 const organisationId = req . params . id ;
@@ -307,8 +316,8 @@ export const requireVerifyOrganisationAccess = asyncHandler(async (req: Request,
307316
308317 const userAuthClaims = req . user ?. AuthClaims || [ ] ;
309318
310- // SuperAdmin global rule
311- if ( handleSuperAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
319+ // SuperAdmin or VolunteerAdmin global rule
320+ if ( handleSuperAdminAccess ( userAuthClaims ) || handleVolunteerAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
312321
313322 // For operations on specific organisations, check access based on role
314323 const organisationId = req . params . id ;
@@ -347,8 +356,8 @@ export const requireOrganisationAccess = asyncHandler(async (req: Request, res:
347356
348357 const userAuthClaims = req . user ?. AuthClaims || [ ] ;
349358
350- // SuperAdmin global rule
351- if ( handleSuperAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
359+ // SuperAdmin or VolunteerAdmin global rule
360+ if ( handleSuperAdminAccess ( userAuthClaims ) || handleVolunteerAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
352361
353362 // For operations on specific organisations, check access based on role
354363 const organisationId = req . params . id ;
@@ -406,8 +415,8 @@ export const requireOrganisationLocationAccess = (req: Request, res: Response, n
406415
407416 const userAuthClaims = req . user ?. AuthClaims || [ ] ;
408417
409- // SuperAdmin global rule
410- if ( handleSuperAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
418+ // SuperAdmin or VolunteerAdmin global rule
419+ if ( handleSuperAdminAccess ( userAuthClaims ) || handleVolunteerAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
411420
412421 // Check if user is a CityAdmin
413422 if ( ! userAuthClaims . includes ( ROLES . CITY_ADMIN ) ) {
@@ -440,8 +449,8 @@ export const requireServiceAccess = asyncHandler(async (req: Request, res: Respo
440449
441450 const userAuthClaims = req . user ?. AuthClaims || [ ] ;
442451
443- // SuperAdmin global rule
444- if ( handleSuperAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
452+ // SuperAdmin or VolunteerAdmin global rule
453+ if ( handleSuperAdminAccess ( userAuthClaims ) || handleVolunteerAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
445454
446455 // For operations on specific services, check access based on role
447456 const serviceId = req . params . id ;
@@ -516,8 +525,8 @@ export const requireServicesByProviderAccess = asyncHandler(async (req: Request,
516525
517526 const userAuthClaims = req . user ?. AuthClaims || [ ] ;
518527
519- // SuperAdmin global rule
520- if ( handleSuperAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
528+ // SuperAdmin or VolunteerAdmin global rule
529+ if ( handleSuperAdminAccess ( userAuthClaims ) || handleVolunteerAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
521530
522531 const providerId = req . params . providerId ;
523532
@@ -558,8 +567,8 @@ export const requireAccommodationsAccess = asyncHandler(async (req: Request, res
558567
559568 const userAuthClaims = req . user ?. AuthClaims || [ ] ;
560569
561- // SuperAdmin global rule
562- if ( handleSuperAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
570+ // SuperAdmin or VolunteerAdmin global rule
571+ if ( handleSuperAdminAccess ( userAuthClaims ) || handleVolunteerAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
563572
564573 // For operations on specific accommodations, check access based on role
565574 const accommodationId = req . params . id ;
@@ -636,8 +645,8 @@ export const requireAccommodationsByProviderAccess = asyncHandler(async (req: Re
636645
637646 const userAuthClaims = req . user ?. AuthClaims || [ ] ;
638647
639- // SuperAdmin global rule
640- if ( handleSuperAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
648+ // SuperAdmin or VolunteerAdmin global rule
649+ if ( handleSuperAdminAccess ( userAuthClaims ) || handleVolunteerAdminAccess ( userAuthClaims ) ) { return next ( ) ; }
641650
642651 const providerId = req . params . providerId ;
643652
0 commit comments