= ({
title={`${role ? "Edit" : "Create"} Custom Role`}
description="Set a name and permissions for this role."
/>
- {canAssignOrgRole && (
-
- {
- navigate(`/organizations/${organizationName}/roles`);
- }}
- >
- Cancel
-
- {
- form.handleSubmit();
- }}
- >
-
- {role !== undefined ? "Save" : "Create Role"}
-
-
- )}
+
+ {
+ navigate(`/organizations/${organizationName}/roles`);
+ }}
+ >
+ Cancel
+
+ {
+ form.handleSubmit();
+ }}
+ >
+
+ {role !== undefined ? "Save" : "Create Role"}
+
+
@@ -135,18 +131,16 @@ export const CreateEditRolePageView: FC = ({
allResources={allResources}
/>
- {canAssignOrgRole && (
-
-
- Cancel
-
+
+
+ Cancel
+
-
-
- {role ? "Save role" : "Create Role"}
-
-
- )}
+
+
+ {role ? "Save role" : "Create Role"}
+
+
>
);
diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx
index 67d511c0665d3..fc5ec83e129a8 100644
--- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx
+++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx
@@ -81,8 +81,9 @@ export const CustomRolesPage: FC = () => {
builtInRoles={builtInRoles}
customRoles={customRoles}
onDeleteRole={setRoleToDelete}
- canAssignOrgRole={organizationPermissions?.assignOrgRoles ?? false}
canCreateOrgRole={organizationPermissions?.createOrgRoles ?? false}
+ canUpdateOrgRole={organizationPermissions?.updateOrgRoles ?? false}
+ canDeleteOrgRole={organizationPermissions?.deleteOrgRoles ?? false}
isCustomRolesEnabled={isCustomRolesEnabled}
/>
diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.stories.tsx
index 79319c888647f..14ffbfa85bc90 100644
--- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.stories.tsx
+++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.stories.tsx
@@ -11,7 +11,6 @@ const meta: Meta = {
args: {
builtInRoles: [MockRoleWithOrgPermissions],
customRoles: [MockRoleWithOrgPermissions],
- canAssignOrgRole: true,
canCreateOrgRole: true,
isCustomRolesEnabled: true,
},
@@ -31,7 +30,7 @@ export const NotEnabled: Story = {
export const NotEnabledEmptyTable: Story = {
args: {
customRoles: [],
- canAssignOrgRole: true,
+ canCreateOrgRole: true,
isCustomRolesEnabled: false,
},
};
@@ -58,7 +57,6 @@ export const EmptyDisplayName: Story = {
export const EmptyTableUserWithoutPermission: Story = {
args: {
customRoles: [],
- canAssignOrgRole: false,
canCreateOrgRole: false,
},
};
diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.tsx
index c770d7396611d..d2eebac62e5f4 100644
--- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.tsx
+++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.tsx
@@ -34,8 +34,9 @@ interface CustomRolesPageViewProps {
builtInRoles: AssignableRoles[] | undefined;
customRoles: AssignableRoles[] | undefined;
onDeleteRole: (role: Role) => void;
- canAssignOrgRole: boolean;
canCreateOrgRole: boolean;
+ canUpdateOrgRole: boolean;
+ canDeleteOrgRole: boolean;
isCustomRolesEnabled: boolean;
}
@@ -43,8 +44,9 @@ export const CustomRolesPageView: FC = ({
builtInRoles,
customRoles,
onDeleteRole,
- canAssignOrgRole,
canCreateOrgRole,
+ canUpdateOrgRole,
+ canDeleteOrgRole,
isCustomRolesEnabled,
}) => {
return (
@@ -77,7 +79,9 @@ export const CustomRolesPageView: FC = ({
@@ -90,7 +94,9 @@ export const CustomRolesPageView: FC = ({
@@ -100,15 +106,19 @@ export const CustomRolesPageView: FC = ({
interface RoleTableProps {
roles: AssignableRoles[] | undefined;
isCustomRolesEnabled: boolean;
- canAssignOrgRole: boolean;
+ canCreateOrgRole: boolean;
+ canUpdateOrgRole: boolean;
+ canDeleteOrgRole: boolean;
onDeleteRole: (role: Role) => void;
}
const RoleTable: FC = ({
roles,
isCustomRolesEnabled,
+ canCreateOrgRole,
+ canUpdateOrgRole,
+ canDeleteOrgRole,
onDeleteRole,
- canAssignOrgRole,
}) => {
const isLoading = roles === undefined;
const isEmpty = Boolean(roles && roles.length === 0);
@@ -134,14 +144,14 @@ const RoleTable: FC = ({
= ({
onDeleteRole(role)}
/>
))}
@@ -179,11 +190,17 @@ const RoleTable: FC = ({
interface RoleRowProps {
role: AssignableRoles;
+ canUpdateOrgRole: boolean;
+ canDeleteOrgRole: boolean;
onDelete: () => void;
- canAssignOrgRole: boolean;
}
-const RoleRow: FC = ({ role, onDelete, canAssignOrgRole }) => {
+const RoleRow: FC = ({
+ role,
+ onDelete,
+ canUpdateOrgRole,
+ canDeleteOrgRole,
+}) => {
const navigate = useNavigate();
return (
@@ -195,20 +212,22 @@ const RoleRow: FC = ({ role, onDelete, canAssignOrgRole }) => {
- {!role.built_in && (
+ {!role.built_in && (canUpdateOrgRole || canDeleteOrgRole) && (
- {
- navigate(role.name);
- }}
- >
- Edit
-
- {canAssignOrgRole && (
+ {canUpdateOrgRole && (
+ {
+ navigate(role.name);
+ }}
+ >
+ Edit
+
+ )}
+ {canDeleteOrgRole && (
Delete…
diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts
index 69f2544192ee4..d2125baab39d6 100644
--- a/site/src/testHelpers/entities.ts
+++ b/site/src/testHelpers/entities.ts
@@ -2900,6 +2900,8 @@ export const MockOrganizationPermissions: OrganizationPermissions = {
viewOrgRoles: true,
createOrgRoles: true,
assignOrgRoles: true,
+ updateOrgRoles: true,
+ deleteOrgRoles: true,
viewProvisioners: true,
viewProvisionerJobs: true,
viewIdpSyncSettings: true,
@@ -2916,6 +2918,8 @@ export const MockNoOrganizationPermissions: OrganizationPermissions = {
viewOrgRoles: false,
createOrgRoles: false,
assignOrgRoles: false,
+ updateOrgRoles: false,
+ deleteOrgRoles: false,
viewProvisioners: false,
viewProvisionerJobs: false,
viewIdpSyncSettings: false,
pFad - Phonifier reborn
Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy