= ({
title={`${role ? "Edit" : "Create"} Custom Role`}
description="Set a name and permissions for this role."
/>
- {canAssignOrgRole && (
-
-
-
-
- )}
+
+
+
+
@@ -135,18 +131,16 @@ export const CreateEditRolePageView: FC = ({
allResources={allResources}
/>
- {canAssignOrgRole && (
-
-
+
+
-
-
- )}
+
+
>
);
diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx
index 67d511c066..fc5ec83e12 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 79319c8886..14ffbfa85b 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 c770d73966..d2eebac62e 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 69f2544192..d2125baab3 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,