mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-06 08:27:22 +00:00
Small improvement on requestProjectAccess
This commit is contained in:
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user