mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-15 23:47:06 +00:00
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { OrgMembershipRole } from "@app/db/schemas";
|
|
import { TFeatureSet } from "@app/ee/services/license/license-types";
|
|
import { BadRequestError, NotFoundError } from "@app/lib/errors";
|
|
import { TOrgRoleDALFactory } from "@app/services/org/org-role-dal";
|
|
|
|
const RESERVED_ORG_ROLE_SLUGS = Object.values(OrgMembershipRole).filter((role) => role !== "custom");
|
|
|
|
export const isCustomOrgRole = (roleSlug: string) => !RESERVED_ORG_ROLE_SLUGS.find((r) => r === roleSlug);
|
|
|
|
// this is only for updating an org
|
|
export const getDefaultOrgMembershipRoleForUpdateOrg = async ({
|
|
membershipRoleSlug,
|
|
orgRoleDAL,
|
|
plan,
|
|
orgId
|
|
}: {
|
|
orgId: string;
|
|
membershipRoleSlug: string;
|
|
orgRoleDAL: TOrgRoleDALFactory;
|
|
plan: TFeatureSet;
|
|
}) => {
|
|
if (isCustomOrgRole(membershipRoleSlug)) {
|
|
if (!plan?.rbac)
|
|
throw new BadRequestError({
|
|
message:
|
|
"Failed to set custom default role due to plan RBAC restriction. Upgrade plan to set custom default org membership role."
|
|
});
|
|
|
|
const customRole = await orgRoleDAL.findOne({ slug: membershipRoleSlug, orgId });
|
|
if (!customRole) {
|
|
throw new NotFoundError({
|
|
name: "UpdateOrg",
|
|
message: `Organization role with slug '${membershipRoleSlug}' not found`
|
|
});
|
|
}
|
|
|
|
// use ID for default role
|
|
return customRole.id;
|
|
}
|
|
|
|
// not custom, use reserved slug
|
|
return membershipRoleSlug;
|
|
};
|
|
|
|
// this is only for creating an org membership
|
|
export const getDefaultOrgMembershipRole = async (
|
|
defaultOrgMembershipRole: string // can either be ID or reserved slug
|
|
) => {
|
|
if (isCustomOrgRole(defaultOrgMembershipRole))
|
|
return {
|
|
roleId: defaultOrgMembershipRole,
|
|
role: OrgMembershipRole.Custom
|
|
};
|
|
|
|
// will be reserved slug
|
|
return { roleId: undefined, role: defaultOrgMembershipRole as OrgMembershipRole };
|
|
};
|