From 58549c398f12bd43b60186888a93844799d36d38 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard Date: Fri, 23 Aug 2024 02:07:21 +0400 Subject: [PATCH] Update project-service.ts --- backend/src/services/project/project-service.ts | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/backend/src/services/project/project-service.ts b/backend/src/services/project/project-service.ts index bc9ed5dee..3e8f7582e 100644 --- a/backend/src/services/project/project-service.ts +++ b/backend/src/services/project/project-service.ts @@ -395,10 +395,14 @@ export const projectServiceFactory = ({ return deletedProject; }; - const getProjects = async ({ actorId, includeRoles, actor, actorAuthMethod, actorOrgId }: TListProjectsDTO) => { + const getProjects = async ({ actorId, includeRoles, actorAuthMethod, actorOrgId }: TListProjectsDTO) => { const workspaces = await projectDAL.findAllProjects(actorId); if (includeRoles) { + const { permission } = await permissionService.getUserOrgPermission(actorId, actorOrgId, actorAuthMethod); + + // `includeRoles` is specifically used by organization admins when inviting new users to the organizations to avoid looping redundant api calls. + ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Create, OrgPermissionSubjects.Member); const customRoles = await projectRoleDAL.find({ $in: { projectId: workspaces.map((workspace) => workspace.id) @@ -409,14 +413,6 @@ export const projectServiceFactory = ({ const workspacesWithRoles = await Promise.all( workspaces.map(async (workspace) => { - const { permission } = await permissionService.getProjectPermission( - actor, - actorId, - workspace.id, - actorAuthMethod, - actorOrgId - ); - ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Read, ProjectPermissionSub.Role); return { ...workspace, roles: [...(workspaceMappedToRoles[workspace.id] || []), ...getPredefinedRoles(workspace.id)] @@ -426,6 +422,7 @@ export const projectServiceFactory = ({ return workspacesWithRoles; } + return workspaces; };