diff --git a/backend/src/ee/routes/v2/identity-project-additional-privilege-router.ts b/backend/src/ee/routes/v2/identity-project-additional-privilege-router.ts index 70ef9990e..b13194278 100644 --- a/backend/src/ee/routes/v2/identity-project-additional-privilege-router.ts +++ b/backend/src/ee/routes/v2/identity-project-additional-privilege-router.ts @@ -339,7 +339,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F privilege: { ...privilege, identityId: req.query.identityId, - projectMembershipId: privilege.projectId as string, + projectMembershipId: privilege.projectMembershipId || (privilege.projectId as string), projectId, slug: privilege.name } diff --git a/backend/src/services/additional-privilege/additional-privilege-service.ts b/backend/src/services/additional-privilege/additional-privilege-service.ts index 7fa99b47a..3fdc58634 100644 --- a/backend/src/services/additional-privilege/additional-privilege-service.ts +++ b/backend/src/services/additional-privilege/additional-privilege-service.ts @@ -294,6 +294,21 @@ export const additionalPrivilegeServiceFactory = ({ const dbActorField = dto.selector.actorType === ActorType.IDENTITY ? "actorIdentityId" : "actorUserId"; const scope = factory.getScopeField(dto.scopeData); + let projectMembershipId: string | undefined; + if (scope.key === "projectId") { + const projectMembership = await membershipDAL.findOne({ + [dbActorField]: dto.selector.actorId, + scopeProjectId: scope.value, + scope: AccessScope.Project + }); + + if (!projectMembership) { + throw new NotFoundError({ + message: `Project membership for ${dto.selector.actorType} ${dto.selector.actorId} not found` + }); + } + projectMembershipId = projectMembership.id; + } const additionalPrivilege = await additionalPrivilegeDAL.findOne({ name: selector.name, [dbActorField]: dto.selector.actorId, @@ -303,7 +318,11 @@ export const additionalPrivilegeServiceFactory = ({ throw new NotFoundError({ message: `Additional privilege with name ${selector.name} doesn't exist` }); return { - additionalPrivilege: { ...additionalPrivilege, permissions: unpackPermissions(additionalPrivilege.permissions) } + additionalPrivilege: { + ...additionalPrivilege, + permissions: unpackPermissions(additionalPrivilege.permissions), + projectMembershipId + } }; };