mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 03:27:15 +00:00
Address PR suggestions
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import { ForbiddenError, subject } from "@casl/ability";
|
import { createMongoAbility, ForbiddenError, MongoAbility, RawRuleOf, subject } from "@casl/ability";
|
||||||
|
import { PackRule, unpackRules } from "@casl/ability/extra";
|
||||||
import slugify from "@sindresorhus/slugify";
|
import slugify from "@sindresorhus/slugify";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -20,6 +21,7 @@ import {
|
|||||||
ProjectPermissionPkiSubscriberActions,
|
ProjectPermissionPkiSubscriberActions,
|
||||||
ProjectPermissionPkiTemplateActions,
|
ProjectPermissionPkiTemplateActions,
|
||||||
ProjectPermissionSecretActions,
|
ProjectPermissionSecretActions,
|
||||||
|
ProjectPermissionSet,
|
||||||
ProjectPermissionSshHostActions,
|
ProjectPermissionSshHostActions,
|
||||||
ProjectPermissionSub
|
ProjectPermissionSub
|
||||||
} from "@app/ee/services/permission/project-permission";
|
} from "@app/ee/services/permission/project-permission";
|
||||||
@@ -1859,30 +1861,29 @@ export const projectServiceFactory = ({
|
|||||||
.map((el) => el.user.email!);
|
.map((el) => el.user.email!);
|
||||||
if (filteredProjectMembers.length === 0) {
|
if (filteredProjectMembers.length === 0) {
|
||||||
const customRolesWithMemberCreate = await projectRoleDAL.find({ projectId });
|
const customRolesWithMemberCreate = await projectRoleDAL.find({ projectId });
|
||||||
const customRoleSlugsCanalCreate = customRolesWithMemberCreate
|
const customRoleSlugsCanCreate = customRolesWithMemberCreate
|
||||||
.filter((role) => {
|
.filter((role) => {
|
||||||
try {
|
try {
|
||||||
const permissions = (
|
const permissions = (
|
||||||
typeof role.permissions === "string" ? JSON.parse(role.permissions) : role.permissions
|
typeof role.permissions === "string"
|
||||||
) as Array<[string, string, object?, number?]>;
|
? (JSON.parse(role.permissions) as PackRule<RawRuleOf<MongoAbility<ProjectPermissionSet>>>[])
|
||||||
|
: role.permissions
|
||||||
|
) as PackRule<RawRuleOf<MongoAbility<ProjectPermissionSet>>>[];
|
||||||
|
|
||||||
return permissions.some(([permissionActions, permissionSubject]) => {
|
const ability = createMongoAbility<MongoAbility<ProjectPermissionSet>>(
|
||||||
if (permissionSubject === ProjectPermissionSub.Member) {
|
unpackRules<RawRuleOf<MongoAbility<ProjectPermissionSet>>>(permissions)
|
||||||
const actionsList = permissionActions.split(",").map((action) => action.trim());
|
);
|
||||||
return actionsList.includes(ProjectPermissionMemberActions.Create);
|
return ability.can(ProjectPermissionMemberActions.Create, ProjectPermissionSub.Member);
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
} catch {
|
} catch {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.map((role) => role.slug);
|
.map((role) => role.slug);
|
||||||
|
|
||||||
if (customRoleSlugsCanalCreate.length > 0) {
|
if (customRoleSlugsCanCreate.length > 0) {
|
||||||
const usersWithCustomCreateMemberRole = projectMembers
|
const usersWithCustomCreateMemberRole = projectMembers
|
||||||
.filter((member) =>
|
.filter((member) =>
|
||||||
member.roles.some((role) => role.customRoleSlug && customRoleSlugsCanalCreate.includes(role.customRoleSlug))
|
member.roles.some((role) => role.customRoleSlug && customRoleSlugsCanCreate.includes(role.customRoleSlug))
|
||||||
)
|
)
|
||||||
.map((el) => el.user.email!)
|
.map((el) => el.user.email!)
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
@@ -1896,7 +1897,7 @@ export const projectServiceFactory = ({
|
|||||||
if (filteredProjectMembers.length === 0) {
|
if (filteredProjectMembers.length === 0) {
|
||||||
throw new BadRequestError({
|
throw new BadRequestError({
|
||||||
message:
|
message:
|
||||||
"No users in this project have permission to grant access. Please contact an organization administrator to assign appropriate permissions to project members."
|
"No users in this project have permission to grant you access. Please contact an organization administrator to assign the necessary permissions."
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user