@@ -8,8 +8,7 @@ import { ResponseMessages } from '@credebl/common/response-messages';
88import { validate as isValidUUID } from 'uuid' ;
99@Injectable ( )
1010export class OrgRolesGuard implements CanActivate {
11- constructor ( private reflector : Reflector ) { } // eslint-disable-next-line array-callback-return
12-
11+ constructor ( private reflector : Reflector ) { }
1312
1413 private logger = new Logger ( 'Org Role Guard' ) ;
1514 async canActivate ( context : ExecutionContext ) : Promise < boolean > {
@@ -25,43 +24,48 @@ export class OrgRolesGuard implements CanActivate {
2524
2625 const req = context . switchToHttp ( ) . getRequest ( ) ;
2726 const { user } = req ;
28-
27+
2928 if ( user ?. userRole && user ?. userRole . includes ( 'holder' ) ) {
3029 throw new ForbiddenException ( 'This role is a holder.' ) ;
3130 }
3231
3332 req . params . orgId = req . params ?. orgId ? req . params ?. orgId ?. trim ( ) : '' ;
3433 req . query . orgId = req . query ?. orgId ? req . query ?. orgId ?. trim ( ) : '' ;
35- req . body . orgId = req . body ?. orgId ? req . body ?. orgId ?. trim ( ) : '' ;
36-
37- const orgId = req . params . orgId || req . query . orgId || req . body . orgId ;
34+ if ( req . body ) {
35+ req . body . orgId = req . body . orgId ?. trim ( ) || '' ;
36+ }
3837
39- if ( orgId ) {
38+ const orgId = req . params . orgId || req . query . orgId || req . body ?. orgId ;
39+ if ( orgId ) {
40+ if ( ! isValidUUID ( orgId ) ) {
41+ throw new BadRequestException ( ResponseMessages . organisation . error . invalidOrgId ) ;
42+ }
4043
41- if ( ! isValidUUID ( orgId ) ) {
42- throw new BadRequestException ( ResponseMessages . organisation . error . invalidOrgId ) ;
43- }
44-
44+ if ( user . hasOwnProperty ( 'resource_access' ) && user . resource_access [ orgId ] ) {
45+ const orgRoles : string [ ] = user . resource_access [ orgId ] . roles ;
46+ const roleAccess = requiredRoles . some ( ( role ) => orgRoles . includes ( role ) ) ;
4547
46- if ( user . hasOwnProperty ( 'resource_access' ) && user . resource_access [ orgId ] ) {
47- const orgRoles : string [ ] = user . resource_access [ orgId ] . roles ;
48- const roleAccess = requiredRoles . some ( ( role ) => orgRoles . includes ( role ) ) ;
49-
50- if ( ! roleAccess ) {
51- throw new ForbiddenException ( ResponseMessages . organisation . error . roleNotMatch , { cause : new Error ( ) , description : ResponseMessages . errorMessages . forbidden } ) ;
52- }
53- return roleAccess ;
48+ if ( ! roleAccess ) {
49+ throw new ForbiddenException ( ResponseMessages . organisation . error . roleNotMatch , {
50+ cause : new Error ( ) ,
51+ description : ResponseMessages . errorMessages . forbidden
52+ } ) ;
5453 }
54+ return roleAccess ;
55+ }
5556
5657 const specificOrg = user . userOrgRoles . find ( ( orgDetails ) => {
5758 if ( ! orgDetails . orgId ) {
5859 return false ;
5960 }
6061 return orgDetails . orgId . toString ( ) . trim ( ) === orgId . toString ( ) . trim ( ) ;
6162 } ) ;
62-
63+
6364 if ( ! specificOrg ) {
64- throw new ForbiddenException ( ResponseMessages . organisation . error . orgNotMatch , { cause : new Error ( ) , description : ResponseMessages . errorMessages . forbidden } ) ;
65+ throw new ForbiddenException ( ResponseMessages . organisation . error . orgNotMatch , {
66+ cause : new Error ( ) ,
67+ description : ResponseMessages . errorMessages . forbidden
68+ } ) ;
6569 }
6670
6771 user . selectedOrg = specificOrg ;
@@ -71,9 +75,7 @@ export class OrgRolesGuard implements CanActivate {
7175 return orgRoleItem . orgRole . name ;
7276 }
7377 } ) ;
74-
75- } else if ( requiredRolesNames . includes ( OrgRoles . PLATFORM_ADMIN ) ) {
76-
78+ } else if ( requiredRolesNames . includes ( OrgRoles . PLATFORM_ADMIN ) ) {
7779 // eslint-disable-next-line array-callback-return
7880 const isPlatformAdmin = user . userOrgRoles . find ( ( orgDetails ) => {
7981 if ( orgDetails . orgRole . name === OrgRoles . PLATFORM_ADMIN ) {
@@ -86,17 +88,19 @@ export class OrgRolesGuard implements CanActivate {
8688 }
8789
8890 return false ;
89-
9091 } else {
9192 throw new BadRequestException ( 'Please provide valid orgId' ) ;
9293 }
9394
9495 // Sending user friendly message if a user attempts to access an API that is inaccessible to their role
9596 const roleAccess = requiredRoles . some ( ( role ) => user . selectedOrg ?. orgRoles . includes ( role ) ) ;
9697 if ( ! roleAccess ) {
97- throw new ForbiddenException ( ResponseMessages . organisation . error . roleNotMatch , { cause : new Error ( ) , description : ResponseMessages . errorMessages . forbidden } ) ;
98+ throw new ForbiddenException ( ResponseMessages . organisation . error . roleNotMatch , {
99+ cause : new Error ( ) ,
100+ description : ResponseMessages . errorMessages . forbidden
101+ } ) ;
98102 }
99103
100104 return roleAccess ;
101105 }
102- }
106+ }
0 commit comments