@@ -7,7 +7,7 @@ import { Reflector } from '@nestjs/core';
77import { ResponseMessages } from '@credebl/common/response-messages' ;
88import { validate as isValidUUID } from 'uuid' ;
99
10- interface EcosystemAccessEntry {
10+ interface EcosystemRoleGroup {
1111 ecosystem_role ?: {
1212 lead ?: string [ ] ;
1313 member ?: string [ ] ;
@@ -51,14 +51,14 @@ export class EcosystemRolesGuard implements CanActivate {
5151 }
5252
5353 const isPlatformAdmin = user . email === process . env . PLATFORM_ADMIN_EMAIL ;
54- /**
55- * =====================================
56- * Ecosystem validation (JWT based only)
57- * =====================================
58- */
5954
6055 let ecosystemId = '' ;
6156
57+ const ecosystemIdExists =
58+ 'undefined' !== typeof reqData . params ?. ecosystemId ||
59+ 'undefined' !== typeof reqData . query ?. ecosystemId ||
60+ 'undefined' !== typeof reqData . body ?. ecosystemId ;
61+
6262 switch ( true ) {
6363 case 'string' === typeof reqData . params ?. ecosystemId :
6464 ecosystemId = reqData . params . ecosystemId . trim ( ) ;
@@ -73,30 +73,36 @@ export class EcosystemRolesGuard implements CanActivate {
7373 ecosystemId = '' ;
7474 }
7575
76- if ( ecosystemId ) {
76+ if ( ecosystemIdExists ) {
77+ if ( ! ecosystemId ) {
78+ throw new BadRequestException ( ResponseMessages . ecosystem . error . ecosystemIdIsRequired ) ;
79+ }
7780 if ( ! isValidUUID ( ecosystemId ) ) {
7881 throw new BadRequestException ( ResponseMessages . ecosystem ?. error ?. invalidEcosystemId || 'Invalid ecosystem id' ) ;
7982 }
8083
81- const ecosystemAccessValues = Object . values ( user ?. ecosystem_access || { } ) ;
84+ const ecosystemAccess = user ?. ecosystem_access ;
8285
83- if ( ! ecosystemAccessValues . length ) {
84- throw new ForbiddenException ( ResponseMessages . ecosystem ?. error ?. ecosystemNotFound || 'Ecosystem not found' ) ;
86+ if ( ! ecosystemAccess ) {
87+ throw new ForbiddenException (
88+ ResponseMessages . ecosystem ?. error ?. ecosystemNotFound || 'User does not have ecosystem access'
89+ ) ;
8590 }
8691
87- const [ ecosystemEntry ] = ecosystemAccessValues as EcosystemAccessEntry [ ] ;
88-
89- const leadList = ecosystemEntry ?. ecosystem_role ?. lead ?? [ ] ;
90- const memberList = ecosystemEntry ?. ecosystem_role ?. member ?? [ ] ;
91-
92- const hasAccess = leadList . includes ( ecosystemId ) || memberList . includes ( ecosystemId ) ;
92+ const hasAccess = Object . values ( ecosystemAccess ) . some ( ( entry : EcosystemRoleGroup ) => {
93+ const leadList = entry ?. ecosystem_role ?. lead ?? [ ] ;
94+ const memberList = entry ?. ecosystem_role ?. member ?? [ ] ;
95+ return leadList . includes ( ecosystemId ) || memberList . includes ( ecosystemId ) ;
96+ } ) ;
9397
9498 if ( ! hasAccess ) {
95- throw new ForbiddenException ( ResponseMessages . ecosystem ?. error ?. ecosystemNotFound || 'Ecosystem not found' ) ;
99+ throw new ForbiddenException (
100+ ResponseMessages . ecosystem ?. error ?. ecosystemNotFound || 'User does not have access to this ecosystem'
101+ ) ;
96102 }
97103
98- // Optional: attach for downstream usage
99104 user . selectedEcosystem = ecosystemId ;
105+ return true ;
100106 }
101107
102108 if ( isPlatformAdmin && requiredRolesNames . includes ( OrgRoles . PLATFORM_ADMIN ) ) {
@@ -122,7 +128,7 @@ export class EcosystemRolesGuard implements CanActivate {
122128 const roleAccess = requiredRoles . some ( ( role ) => orgRoles . includes ( role ) ) ;
123129
124130 if ( ! roleAccess ) {
125- throw new ForbiddenException ( ResponseMessages . organisation . error . roleNotMatch , {
131+ throw new ForbiddenException ( '1111111' , {
126132 cause : new Error ( 'error' ) ,
127133 description : ResponseMessages . errorMessages . forbidden
128134 } ) ;
@@ -157,7 +163,7 @@ export class EcosystemRolesGuard implements CanActivate {
157163 // Sending user friendly message if a user attempts to access an API that is inaccessible to their role
158164 const roleAccess = requiredRoles . some ( ( role ) => user . selectedOrg ?. orgRoles . includes ( role ) ) ;
159165 if ( ! roleAccess ) {
160- throw new ForbiddenException ( ResponseMessages . organisation . error . roleNotMatch , {
166+ throw new ForbiddenException ( '222222' , {
161167 cause : new Error ( 'error' ) ,
162168 description : ResponseMessages . errorMessages . forbidden
163169 } ) ;
0 commit comments