diff --git a/apps/api/src/services/impersonation/impersonation.service.ts b/apps/api/src/services/impersonation/impersonation.service.ts index 3aace0788..e678356cb 100644 --- a/apps/api/src/services/impersonation/impersonation.service.ts +++ b/apps/api/src/services/impersonation/impersonation.service.ts @@ -12,22 +12,36 @@ export class ImpersonationService { ) {} public async validateImpersonationId(aId = '') { - const accessObject = await this.prismaService.access.findFirst({ - where: { - GranteeUser: { id: this.request.user.id }, - id: aId + if (this.request.user) { + const accessObject = await this.prismaService.access.findFirst({ + where: { + GranteeUser: { id: this.request.user.id }, + id: aId + } + }); + + if (accessObject?.userId) { + return accessObject.userId; + } else if ( + hasPermission( + this.request.user.permissions, + permissions.impersonateAllUsers + ) + ) { + return aId; } - }); + } else { + // Public access + const accessObject = await this.prismaService.access.findFirst({ + where: { + GranteeUser: null, + User: { id: aId } + } + }); - if (accessObject?.userId) { - return accessObject?.userId; - } else if ( - hasPermission( - this.request.user.permissions, - permissions.impersonateAllUsers - ) - ) { - return aId; + if (accessObject?.userId) { + return accessObject.userId; + } } return null;