From af236ba89201e32a9a2494e5f07b1e8c1d63e556 Mon Sep 17 00:00:00 2001 From: carlosmonastyrski Date: Wed, 19 Mar 2025 15:30:05 -0300 Subject: [PATCH] Avoid throwing forbidden on non accessible resources and return an empty response for those --- .../secret-import/secret-import-service.ts | 33 ++++++++++++++++--- .../src/hooks/api/secretImports/queries.tsx | 1 - 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/backend/src/services/secret-import/secret-import-service.ts b/backend/src/services/secret-import/secret-import-service.ts index ce03e8e4e..fdd326b5f 100644 --- a/backend/src/services/secret-import/secret-import-service.ts +++ b/backend/src/services/secret-import/secret-import-service.ts @@ -487,7 +487,22 @@ export const secretImportServiceFactory = ({ actorOrgId, actionProjectType: ActionProjectType.SecretManager }); + const filteredEnvironments = []; for (const environment of environments) { + if ( + permission.can( + ProjectPermissionActions.Read, + subject(ProjectPermissionSub.SecretImports, { environment, secretPath }) + ) + ) { + filteredEnvironments.push(environment); + } + } + if (filteredEnvironments.length === 0) { + return 0; + } + + for (const environment of filteredEnvironments) { ForbiddenError.from(permission).throwUnlessCan( ProjectPermissionActions.Read, subject(ProjectPermissionSub.SecretImports, { environment, secretPath }) @@ -745,14 +760,22 @@ export const secretImportServiceFactory = ({ actorOrgId, actionProjectType: ActionProjectType.SecretManager }); + const filteredEnvironments = []; for (const environment of environments) { - ForbiddenError.from(permission).throwUnlessCan( - ProjectPermissionActions.Read, - subject(ProjectPermissionSub.SecretImports, { environment, secretPath }) - ); + if ( + permission.can( + ProjectPermissionActions.Read, + subject(ProjectPermissionSub.SecretImports, { environment, secretPath }) + ) + ) { + filteredEnvironments.push(environment); + } + } + if (filteredEnvironments.length === 0) { + return []; } - const folders = await folderDAL.findBySecretPathMultiEnv(projectId, environments, secretPath); + const folders = await folderDAL.findBySecretPathMultiEnv(projectId, filteredEnvironments, secretPath); if (!folders?.length) throw new NotFoundError({ message: `Folder with path '${secretPath}' not found on environments with slugs '${environments.join(", ")}'` diff --git a/frontend/src/hooks/api/secretImports/queries.tsx b/frontend/src/hooks/api/secretImports/queries.tsx index 828bd52e1..dfc8c6497 100644 --- a/frontend/src/hooks/api/secretImports/queries.tsx +++ b/frontend/src/hooks/api/secretImports/queries.tsx @@ -167,7 +167,6 @@ export const useGetImportedSecretsAllEnvs = ({ select: useCallback( (data: Awaited>) => data.map((el) => ({ - currentEnv: env, environment: el.environment, secretPath: el.secretPath, environmentInfo: el.environmentInfo,