From b062ca30757c2b0eca0f1f1f76a75f7ca78d865b Mon Sep 17 00:00:00 2001 From: = Date: Sat, 19 Oct 2024 14:27:17 +0530 Subject: [PATCH] feat: resolved identity privilege removed folder, dynamic secret and secret import permission --- backend/src/server/routes/sanitizedSchemas.ts | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/backend/src/server/routes/sanitizedSchemas.ts b/backend/src/server/routes/sanitizedSchemas.ts index af305e73b..87fa2b120 100644 --- a/backend/src/server/routes/sanitizedSchemas.ts +++ b/backend/src/server/routes/sanitizedSchemas.ts @@ -150,7 +150,16 @@ export const ProjectSpecificPrivilegePermissionSchema = z.object({ }); export const SanitizedIdentityPrivilegeSchema = IdentityProjectAdditionalPrivilegeSchema.extend({ - permissions: UnpackedPermissionSchema.array() + permissions: UnpackedPermissionSchema.array().transform((permissions) => + permissions.filter( + (caslRule) => + ![ + ProjectPermissionSub.DynamicSecrets, + ProjectPermissionSub.SecretImports, + ProjectPermissionSub.SecretFolders + ].includes((caslRule?.subject as ProjectPermissionSub) || "") + ) + ) }); export const SanitizedRoleSchema = ProjectRolesSchema.extend({ @@ -158,13 +167,24 @@ export const SanitizedRoleSchema = ProjectRolesSchema.extend({ }); export const SanitizedRoleSchemaV1 = ProjectRolesSchema.extend({ - permissions: UnpackedPermissionSchema.array().transform((el) => - el.filter( - (i) => - ![ProjectPermissionSub.DynamicSecrets, ProjectPermissionSub.SecretImports].includes( - (i?.subject as ProjectPermissionSub) || "" - ) - ) + permissions: UnpackedPermissionSchema.array().transform((caslPermission) => + // first map and remove other actions of folder permission + caslPermission + .map((caslRule) => + caslRule.subject === ProjectPermissionSub.SecretFolders + ? { + ...caslRule, + action: caslRule.action.filter((caslAction) => caslAction === ProjectPermissionActions.Read) + } + : caslRule + ) + // now filter out dynamic secret, secret import permission + .filter( + (caslRule) => + ![ProjectPermissionSub.DynamicSecrets, ProjectPermissionSub.SecretImports].includes( + (caslRule?.subject as ProjectPermissionSub) || "" + ) && caslRule.action.length > 0 + ) ) });