fix: correct update role mapping for identity/user and prevent updating role slug to "custom"

This commit is contained in:
Scott Wilson
2024-11-22 13:02:00 -08:00
parent d7b494c6f8
commit 24b50651c9
3 changed files with 60 additions and 6 deletions
@@ -182,7 +182,12 @@ export const identityProjectServiceFactory = ({
// validate custom roles input // validate custom roles input
const customInputRoles = roles.filter( const customInputRoles = roles.filter(
({ role }) => !Object.values(ProjectMembershipRole).includes(role as ProjectMembershipRole) ({ role }) =>
!Object.values(ProjectMembershipRole)
// we don't want to include custom in this check;
// this unintentionally lets users set slug to custom which is reserved
.filter((r) => r !== ProjectMembershipRole.Custom)
.includes(role as ProjectMembershipRole)
); );
const hasCustomRole = Boolean(customInputRoles.length); const hasCustomRole = Boolean(customInputRoles.length);
const customRoles = hasCustomRole const customRoles = hasCustomRole
@@ -50,11 +50,34 @@ export const IdentityRoleDetailsSection = ({
const handleRoleDelete = async () => { const handleRoleDelete = async () => {
const { id } = popUp?.deleteRole?.data as TProjectRole; const { id } = popUp?.deleteRole?.data as TProjectRole;
try { try {
const updatedRole = identityMembershipDetails?.roles?.filter((el) => el.id !== id); const updatedRoles = identityMembershipDetails?.roles?.filter((el) => el.id !== id);
await updateIdentityWorkspaceRole({ await updateIdentityWorkspaceRole({
workspaceId: currentWorkspace?.id || "", workspaceId: currentWorkspace?.id || "",
identityId: identityMembershipDetails.identity.id, identityId: identityMembershipDetails.identity.id,
roles: updatedRole roles: updatedRoles.map(
({
role,
customRoleSlug,
isTemporary,
temporaryMode,
temporaryRange,
temporaryAccessStartTime,
temporaryAccessEndTime
}) => ({
role: role === "custom" ? customRoleSlug : role,
...(isTemporary
? {
isTemporary,
temporaryMode,
temporaryRange,
temporaryAccessStartTime,
temporaryAccessEndTime
}
: {
isTemporary
})
})
)
}); });
createNotification({ type: "success", text: "Successfully removed role" }); createNotification({ type: "success", text: "Successfully removed role" });
handlePopUpClose("deleteRole"); handlePopUpClose("deleteRole");
@@ -61,10 +61,33 @@ export const MemberRoleDetailsSection = ({
const handleRoleDelete = async () => { const handleRoleDelete = async () => {
const { id } = popUp?.deleteRole?.data as TProjectRole; const { id } = popUp?.deleteRole?.data as TProjectRole;
try { try {
const updatedRole = membershipDetails?.roles?.filter((el) => el.id !== id); const updatedRoles = membershipDetails?.roles?.filter((el) => el.id !== id);
await updateUserWorkspaceRole({ await updateUserWorkspaceRole({
workspaceId: currentWorkspace?.id || "", workspaceId: currentWorkspace?.id || "",
roles: updatedRole, roles: updatedRoles.map(
({
role,
customRoleSlug,
isTemporary,
temporaryMode,
temporaryRange,
temporaryAccessStartTime,
temporaryAccessEndTime
}) => ({
role: role === "custom" ? customRoleSlug : role,
...(isTemporary
? {
isTemporary,
temporaryMode,
temporaryRange,
temporaryAccessStartTime,
temporaryAccessEndTime
}
: {
isTemporary
})
})
),
membershipId: membershipDetails.id membershipId: membershipDetails.id
}); });
createNotification({ type: "success", text: "Successfully removed role" }); createNotification({ type: "success", text: "Successfully removed role" });
@@ -215,7 +238,10 @@ export const MemberRoleDetailsSection = ({
title="Roles" title="Roles"
subTitle="Select one or more of the pre-defined or custom roles to configure project permissions." subTitle="Select one or more of the pre-defined or custom roles to configure project permissions."
> >
<MemberRoleModify projectMember={membershipDetails} onOpenUpgradeModal={onOpenUpgradeModal} /> <MemberRoleModify
projectMember={membershipDetails}
onOpenUpgradeModal={onOpenUpgradeModal}
/>
</ModalContent> </ModalContent>
</Modal> </Modal>
</div> </div>