From 355113e15d2ead092fc8174f27feeb96fe20fe9d Mon Sep 17 00:00:00 2001 From: = Date: Wed, 2 Oct 2024 19:52:27 +0530 Subject: [PATCH] fix: changed least privilege check for identity for action array consideration --- backend/src/lib/casl/index.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/backend/src/lib/casl/index.ts b/backend/src/lib/casl/index.ts index 9e5cb29d3..71625e181 100644 --- a/backend/src/lib/casl/index.ts +++ b/backend/src/lib/casl/index.ts @@ -23,8 +23,19 @@ export const conditionsMatcher = buildMongoQueryMatcher({ $glob }, { glob }); /** * Extracts and formats permissions from a CASL Ability object or a raw permission set. */ -const extractPermissions = (ability: MongoAbility) => - ability.rules.map((permission) => `${permission.action as string}_${permission.subject as string}`); +const extractPermissions = (ability: MongoAbility) => { + const permissions: string[] = []; + ability.rules.forEach((permission) => { + if (typeof permission.action === "string") { + permissions.push(`${permission.action}_${permission.subject as string}`); + } else { + permission.action.forEach((permissionAction) => { + permissions.push(`${permissionAction}_${permission.subject as string}`); + }); + } + }); + return permissions; +}; /** * Compares two sets of permissions to determine if the first set is at least as privileged as the second set.