Small improvement on requestProjectAccess

This commit is contained in:
Carlos Monastyrski
2025-09-05 18:02:50 -03:00
parent ddbc4aeded
commit 5822210511
+31 -27
View File
@@ -1857,35 +1857,39 @@ export const projectServiceFactory = ({
let filteredProjectMembers = projectMembers let filteredProjectMembers = projectMembers
.filter((member) => member.roles.some((role) => role.role === ProjectMembershipRole.Admin)) .filter((member) => member.roles.some((role) => role.role === ProjectMembershipRole.Admin))
.map((el) => el.user.email!); .map((el) => el.user.email!);
if (filteredProjectMembers.length === 0) {
const customRolesWithMemberCreate = await projectRoleDAL.find({ projectId });
const customRoleSlugsCanalCreate = customRolesWithMemberCreate
.filter((role) => {
try {
const permissions = (
typeof role.permissions === "string" ? JSON.parse(role.permissions) : role.permissions
) as Array<[string, string, object?, number?]>;
const customRolesWithMemberCreate = await projectRoleDAL.find({ projectId }); return permissions.some(([permissionActions, permissionSubject]) => {
const customRoleSlugsCanalCreate = customRolesWithMemberCreate if (permissionSubject === ProjectPermissionSub.Member) {
.filter((role) => { const actionsList = permissionActions.split(",").map((action) => action.trim());
try { return actionsList.includes(ProjectPermissionMemberActions.Create);
const permissions = JSON.parse(role.permissions as string) as Array<{ }
action: string; return false;
subject: string; });
}>; } catch {
return permissions.some( return false;
(perm) => }
perm.action === ProjectPermissionMemberActions.Create && perm.subject === ProjectPermissionSub.Member })
); .map((role) => role.slug);
} catch {
return false; if (customRoleSlugsCanalCreate.length > 0) {
const usersWithCustomCreateMemberRole = projectMembers
.filter((member) =>
member.roles.some((role) => role.customRoleSlug && customRoleSlugsCanalCreate.includes(role.customRoleSlug))
)
.map((el) => el.user.email!)
.filter(Boolean);
if (usersWithCustomCreateMemberRole.length > 0) {
filteredProjectMembers = usersWithCustomCreateMemberRole;
} }
})
.map((role) => role.slug);
if (customRoleSlugsCanalCreate.length > 0) {
const usersWithCustomCreateMemberRole = projectMembers
.filter((member) =>
member.roles.some((role) => role.customRoleSlug && customRoleSlugsCanalCreate.includes(role.customRoleSlug))
)
.map((el) => el.user.email!)
.filter(Boolean);
if (usersWithCustomCreateMemberRole.length > 0) {
filteredProjectMembers = usersWithCustomCreateMemberRole;
} }
} }