- {permissions.viewDeploymentValues && (
-
General
+ {permissions.viewDeploymentConfig && (
+
Overview
)}
{permissions.viewAllLicenses && (
Licenses
)}
- {permissions.editDeploymentValues && (
+ {permissions.editDeploymentConfig && (
Appearance
)}
- {permissions.viewDeploymentValues && (
+ {permissions.viewDeploymentConfig && (
User Authentication
)}
- {permissions.viewDeploymentValues && (
+ {permissions.viewDeploymentConfig && (
External Authentication
)}
{/* Not exposing this yet since token exchange is not finished yet.
-
+
OAuth2 Applications
*/}
- {permissions.viewDeploymentValues && (
+ {permissions.viewDeploymentConfig && (
Network
)}
{permissions.readWorkspaceProxies && (
@@ -63,10 +60,10 @@ export const DeploymentSidebarView: FC = ({
Workspace Proxies
)}
- {permissions.viewDeploymentValues && (
+ {permissions.viewDeploymentConfig && (
Security
)}
- {permissions.viewDeploymentValues && (
+ {permissions.viewDeploymentConfig && (
Observability
@@ -81,6 +78,11 @@ export const DeploymentSidebarView: FC
= ({
)}
+ {permissions.viewOrganizationIDPSyncSettings && (
+
+ IdP Organization Sync
+
+ )}
{permissions.viewNotificationTemplate && (
@@ -89,11 +91,6 @@ export const DeploymentSidebarView: FC = ({
)}
- {permissions.viewOrganizationIDPSyncSettings && (
-
- IdP Organization Sync
-
- )}
{!hasPremiumLicense && (
Premium
)}
diff --git a/site/src/modules/management/OrganizationSettingsLayout.tsx b/site/src/modules/management/OrganizationSettingsLayout.tsx
index ae1ce597641ae..00a435b82cd41 100644
--- a/site/src/modules/management/OrganizationSettingsLayout.tsx
+++ b/site/src/modules/management/OrganizationSettingsLayout.tsx
@@ -11,14 +11,14 @@ import {
} from "components/Breadcrumb/Breadcrumb";
import { Loader } from "components/Loader/Loader";
import { useDashboard } from "modules/dashboard/useDashboard";
+import {
+ type OrganizationPermissions,
+ canViewOrganization,
+} from "modules/permissions/organizations";
import NotFoundPage from "pages/404Page/404Page";
import { type FC, Suspense, createContext, useContext } from "react";
import { useQuery } from "react-query";
import { Outlet, useParams } from "react-router-dom";
-import {
- type OrganizationPermissions,
- canViewOrganization,
-} from "./organizationPermissions";
export const OrganizationSettingsContext = createContext<
OrganizationSettingsValue | undefined
@@ -46,7 +46,7 @@ export const useOrganizationSettings = (): OrganizationSettingsValue => {
};
const OrganizationSettingsLayout: FC = () => {
- const { organizations, showOrganizations } = useDashboard();
+ const { organizations } = useDashboard();
const { organization: orgName } = useParams() as {
organization?: string;
};
diff --git a/site/src/modules/management/OrganizationSidebarView.tsx b/site/src/modules/management/OrganizationSidebarView.tsx
index 71a37659ab14d..ff5617eaa495d 100644
--- a/site/src/modules/management/OrganizationSidebarView.tsx
+++ b/site/src/modules/management/OrganizationSidebarView.tsx
@@ -16,11 +16,11 @@ import {
PopoverTrigger,
} from "components/Popover/Popover";
import { SettingsSidebarNavItem } from "components/Sidebar/Sidebar";
-import type { Permissions } from "contexts/auth/permissions";
import { Check, ChevronDown, Plus } from "lucide-react";
+import type { Permissions } from "modules/permissions";
+import type { OrganizationPermissions } from "modules/permissions/organizations";
import { type FC, useState } from "react";
import { useNavigate } from "react-router-dom";
-import type { OrganizationPermissions } from "./organizationPermissions";
interface OrganizationsSettingsNavigationProps {
/** The organization selected from the dropdown */
diff --git a/site/src/contexts/auth/RequirePermission.tsx b/site/src/modules/permissions/RequirePermission.tsx
similarity index 100%
rename from site/src/contexts/auth/RequirePermission.tsx
rename to site/src/modules/permissions/RequirePermission.tsx
diff --git a/site/src/contexts/auth/permissions.tsx b/site/src/modules/permissions/index.ts
similarity index 91%
rename from site/src/contexts/auth/permissions.tsx
rename to site/src/modules/permissions/index.ts
index 0d8957627c36d..300edec9e52db 100644
--- a/site/src/contexts/auth/permissions.tsx
+++ b/site/src/modules/permissions/index.ts
@@ -30,7 +30,7 @@ export const permissionChecks = {
resource_type: "template",
any_org: true,
},
- action: "update",
+ action: "create",
},
updateTemplates: {
object: {
@@ -44,30 +44,18 @@ export const permissionChecks = {
},
action: "delete",
},
- viewDeploymentValues: {
+ viewDeploymentConfig: {
object: {
resource_type: "deployment_config",
},
action: "read",
},
- editDeploymentValues: {
+ editDeploymentConfig: {
object: {
resource_type: "deployment_config",
},
action: "update",
},
- viewUpdateCheck: {
- object: {
- resource_type: "deployment_config",
- },
- action: "read",
- },
- viewExternalAuthConfig: {
- object: {
- resource_type: "deployment_config",
- },
- action: "read",
- },
viewDeploymentStats: {
object: {
resource_type: "deployment_stats",
@@ -178,7 +166,7 @@ export const canViewDeploymentSettings = (
): permissions is Permissions => {
return (
permissions !== undefined &&
- (permissions.viewDeploymentValues ||
+ (permissions.viewDeploymentConfig ||
permissions.viewAllLicenses ||
permissions.viewAllUsers ||
permissions.viewAnyGroup ||
diff --git a/site/src/modules/management/organizationPermissions.tsx b/site/src/modules/permissions/organizations.ts
similarity index 100%
rename from site/src/modules/management/organizationPermissions.tsx
rename to site/src/modules/permissions/organizations.ts
diff --git a/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPage.tsx b/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPage.tsx
index 03908da7e3a78..88b90f7f8c1d0 100644
--- a/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPage.tsx
+++ b/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPage.tsx
@@ -1,11 +1,11 @@
-import { useDeploymentSettings } from "modules/management/DeploymentSettingsProvider";
+import { useDeploymentConfig } from "modules/management/DeploymentConfigProvider";
import type { FC } from "react";
import { Helmet } from "react-helmet-async";
import { pageTitle } from "utils/page";
import { ExternalAuthSettingsPageView } from "./ExternalAuthSettingsPageView";
const ExternalAuthSettingsPage: FC = () => {
- const { deploymentConfig } = useDeploymentSettings();
+ const { deploymentConfig } = useDeploymentConfig();
return (
<>
diff --git a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseSeatConsumptionChart.tsx b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseSeatConsumptionChart.tsx
index 78f6a08087d74..3a3d191e030be 100644
--- a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseSeatConsumptionChart.tsx
+++ b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseSeatConsumptionChart.tsx
@@ -108,7 +108,7 @@ export const LicenseSeatConsumptionChart: FC<
-
+
Daily user activity
diff --git a/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPage.tsx b/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPage.tsx
index cdbc3fb142ff1..7118560dca1bf 100644
--- a/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPage.tsx
+++ b/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPage.tsx
@@ -1,11 +1,11 @@
-import { useDeploymentSettings } from "modules/management/DeploymentSettingsProvider";
+import { useDeploymentConfig } from "modules/management/DeploymentConfigProvider";
import type { FC } from "react";
import { Helmet } from "react-helmet-async";
import { pageTitle } from "utils/page";
import { NetworkSettingsPageView } from "./NetworkSettingsPageView";
const NetworkSettingsPage: FC = () => {
- const { deploymentConfig } = useDeploymentSettings();
+ const { deploymentConfig } = useDeploymentConfig();
return (
<>
diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx
index 2e73e4c6a2b9b..1a38cd1de9c84 100644
--- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx
+++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx
@@ -9,7 +9,7 @@ import { Loader } from "components/Loader/Loader";
import { SettingsHeader } from "components/SettingsHeader/SettingsHeader";
import { TabLink, Tabs, TabsList } from "components/Tabs/Tabs";
import { useSearchParamsKey } from "hooks/useSearchParamsKey";
-import { useDeploymentSettings } from "modules/management/DeploymentSettingsProvider";
+import { useDeploymentConfig } from "modules/management/DeploymentConfigProvider";
import { castNotificationMethod } from "modules/notifications/utils";
import type { FC } from "react";
import { Helmet } from "react-helmet-async";
@@ -22,7 +22,7 @@ import { NotificationEvents } from "./NotificationEvents";
import { Troubleshooting } from "./Troubleshooting";
export const NotificationsPage: FC = () => {
- const { deploymentConfig } = useDeploymentSettings();
+ const { deploymentConfig } = useDeploymentConfig();
const [templatesByGroup, dispatchMethods] = useQueries({
queries: [
{
diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/storybookUtils.ts b/site/src/pages/DeploymentSettingsPage/NotificationsPage/storybookUtils.ts
index fc500efd847d6..0ceac24520e1a 100644
--- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/storybookUtils.ts
+++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/storybookUtils.ts
@@ -194,7 +194,7 @@ export const baseMeta = {
},
],
user: MockUser,
- permissions: { viewDeploymentValues: true },
+ permissions: { viewDeploymentConfig: true },
deploymentOptions: mockNotificationsDeploymentOptions,
deploymentValues: {
notifications: {
diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx
index 12b574c177384..bce0a0d544709 100644
--- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx
+++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx
@@ -1,13 +1,13 @@
import { useDashboard } from "modules/dashboard/useDashboard";
import { useFeatureVisibility } from "modules/dashboard/useFeatureVisibility";
-import { useDeploymentSettings } from "modules/management/DeploymentSettingsProvider";
+import { useDeploymentConfig } from "modules/management/DeploymentConfigProvider";
import type { FC } from "react";
import { Helmet } from "react-helmet-async";
import { pageTitle } from "utils/page";
import { ObservabilitySettingsPageView } from "./ObservabilitySettingsPageView";
const ObservabilitySettingsPage: FC = () => {
- const { deploymentConfig } = useDeploymentSettings();
+ const { deploymentConfig } = useDeploymentConfig();
const { entitlements } = useDashboard();
const { multiple_organizations: hasPremiumLicense } = useFeatureVisibility();
diff --git a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/ChartSection.tsx b/site/src/pages/DeploymentSettingsPage/OverviewPage/ChartSection.tsx
similarity index 100%
rename from site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/ChartSection.tsx
rename to site/src/pages/DeploymentSettingsPage/OverviewPage/ChartSection.tsx
diff --git a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPage.tsx b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPage.tsx
similarity index 73%
rename from site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPage.tsx
rename to site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPage.tsx
index 32a9c3c971d78..fc15eca1ec4f1 100644
--- a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPage.tsx
+++ b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPage.tsx
@@ -1,15 +1,15 @@
import { deploymentDAUs } from "api/queries/deployment";
import { availableExperiments, experiments } from "api/queries/experiments";
import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata";
-import { useDeploymentSettings } from "modules/management/DeploymentSettingsProvider";
+import { useDeploymentConfig } from "modules/management/DeploymentConfigProvider";
import type { FC } from "react";
import { Helmet } from "react-helmet-async";
import { useQuery } from "react-query";
import { pageTitle } from "utils/page";
-import { GeneralSettingsPageView } from "./GeneralSettingsPageView";
+import { OverviewPageView } from "./OverviewPageView";
-const GeneralSettingsPage: FC = () => {
- const { deploymentConfig } = useDeploymentSettings();
+const OverviewPage: FC = () => {
+ const { deploymentConfig } = useDeploymentConfig();
const safeExperimentsQuery = useQuery(availableExperiments());
const { metadata } = useEmbeddedMetadata();
@@ -26,9 +26,9 @@ const GeneralSettingsPage: FC = () => {
return (
<>
- {pageTitle("General Settings")}
+ {pageTitle("Overview", "Deployment")}
- {
);
};
-export default GeneralSettingsPage;
+export default OverviewPage;
diff --git a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.stories.tsx
similarity index 91%
rename from site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx
rename to site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.stories.tsx
index 50b04bb64228e..b3398f8b1f204 100644
--- a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx
+++ b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.stories.tsx
@@ -1,10 +1,10 @@
import type { Meta, StoryObj } from "@storybook/react";
import { MockDeploymentDAUResponse } from "testHelpers/entities";
-import { GeneralSettingsPageView } from "./GeneralSettingsPageView";
+import { OverviewPageView } from "./OverviewPageView";
-const meta: Meta = {
- title: "pages/DeploymentSettingsPage/GeneralSettingsPageView",
- component: GeneralSettingsPageView,
+const meta: Meta = {
+ title: "pages/DeploymentSettingsPage/OverviewPageView",
+ component: OverviewPageView,
args: {
deploymentOptions: [
{
@@ -42,7 +42,7 @@ const meta: Meta = {
};
export default meta;
-type Story = StoryObj;
+type Story = StoryObj;
export const Page: Story = {};
diff --git a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.tsx
similarity index 94%
rename from site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.tsx
rename to site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.tsx
index 57bb213457e9f..b3a72a7623082 100644
--- a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.tsx
+++ b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.tsx
@@ -14,14 +14,14 @@ import { Alert } from "../../../components/Alert/Alert";
import OptionsTable from "../OptionsTable";
import { UserEngagementChart } from "./UserEngagementChart";
-export type GeneralSettingsPageViewProps = {
+export type OverviewPageViewProps = {
deploymentOptions: SerpentOption[];
dailyActiveUsers: DAUsResponse | undefined;
readonly invalidExperiments: Experiments | string[];
readonly safeExperiments: Experiments | string[];
};
-export const GeneralSettingsPageView: FC = ({
+export const OverviewPageView: FC = ({
deploymentOptions,
dailyActiveUsers,
safeExperiments,
diff --git a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/UserEngagementChart.stories.tsx b/site/src/pages/DeploymentSettingsPage/OverviewPage/UserEngagementChart.stories.tsx
similarity index 100%
rename from site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/UserEngagementChart.stories.tsx
rename to site/src/pages/DeploymentSettingsPage/OverviewPage/UserEngagementChart.stories.tsx
diff --git a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/UserEngagementChart.tsx b/site/src/pages/DeploymentSettingsPage/OverviewPage/UserEngagementChart.tsx
similarity index 100%
rename from site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/UserEngagementChart.tsx
rename to site/src/pages/DeploymentSettingsPage/OverviewPage/UserEngagementChart.tsx
diff --git a/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPage.tsx b/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPage.tsx
index 1ac3fb00c7569..981f35d34704a 100644
--- a/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPage.tsx
+++ b/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPage.tsx
@@ -1,12 +1,12 @@
import { useDashboard } from "modules/dashboard/useDashboard";
-import { useDeploymentSettings } from "modules/management/DeploymentSettingsProvider";
+import { useDeploymentConfig } from "modules/management/DeploymentConfigProvider";
import type { FC } from "react";
import { Helmet } from "react-helmet-async";
import { pageTitle } from "utils/page";
import { SecuritySettingsPageView } from "./SecuritySettingsPageView";
const SecuritySettingsPage: FC = () => {
- const { deploymentConfig } = useDeploymentSettings();
+ const { deploymentConfig } = useDeploymentConfig();
const { entitlements } = useDashboard();
return (
diff --git a/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPage.tsx b/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPage.tsx
index 1502fe0eab366..0f5d0269c8849 100644
--- a/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPage.tsx
+++ b/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPage.tsx
@@ -1,11 +1,11 @@
-import { useDeploymentSettings } from "modules/management/DeploymentSettingsProvider";
+import { useDeploymentConfig } from "modules/management/DeploymentConfigProvider";
import type { FC } from "react";
import { Helmet } from "react-helmet-async";
import { pageTitle } from "utils/page";
import { UserAuthSettingsPageView } from "./UserAuthSettingsPageView";
const UserAuthSettingsPage: FC = () => {
- const { deploymentConfig } = useDeploymentSettings();
+ const { deploymentConfig } = useDeploymentConfig();
return (
<>
diff --git a/site/src/pages/ExternalAuthPage/ExternalAuthPage.tsx b/site/src/pages/ExternalAuthPage/ExternalAuthPage.tsx
index 7cef9e8774b4c..a7f97cefa92f4 100644
--- a/site/src/pages/ExternalAuthPage/ExternalAuthPage.tsx
+++ b/site/src/pages/ExternalAuthPage/ExternalAuthPage.tsx
@@ -104,7 +104,7 @@ const ExternalAuthPage: FC = () => {
authenticated: false,
});
}}
- viewExternalAuthConfig={permissions.viewExternalAuthConfig}
+ viewExternalAuthConfig={permissions.viewDeploymentConfig}
deviceExchangeError={deviceExchangeError}
externalAuthDevice={externalAuthDeviceQuery.data}
/>
diff --git a/site/src/pages/OrganizationSettingsPage/CreateOrganizationPage.tsx b/site/src/pages/OrganizationSettingsPage/CreateOrganizationPage.tsx
index cecfae677f4b9..3258461ea79bb 100644
--- a/site/src/pages/OrganizationSettingsPage/CreateOrganizationPage.tsx
+++ b/site/src/pages/OrganizationSettingsPage/CreateOrganizationPage.tsx
@@ -1,8 +1,8 @@
import { createOrganization } from "api/queries/organizations";
import { displaySuccess } from "components/GlobalSnackbar/utils";
import { useAuthenticated } from "contexts/auth/RequireAuth";
-import { RequirePermission } from "contexts/auth/RequirePermission";
import { useFeatureVisibility } from "modules/dashboard/useFeatureVisibility";
+import { RequirePermission } from "modules/permissions/RequirePermission";
import type { FC } from "react";
import { useMutation, useQueryClient } from "react-query";
import { useNavigate } from "react-router-dom";
diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePage.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePage.tsx
index 43ae73598059e..0d702b400e69d 100644
--- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePage.tsx
+++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePage.tsx
@@ -8,8 +8,8 @@ import type { CustomRoleRequest } from "api/typesGenerated";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { displayError } from "components/GlobalSnackbar/utils";
import { Loader } from "components/Loader/Loader";
-import { RequirePermission } from "contexts/auth/RequirePermission";
import { useOrganizationSettings } from "modules/management/OrganizationSettingsLayout";
+import { RequirePermission } from "modules/permissions/RequirePermission";
import type { FC } from "react";
import { Helmet } from "react-helmet-async";
import { useMutation, useQuery, useQueryClient } from "react-query";
diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx
index 4e7b8c386120a..ca567fdce7836 100644
--- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx
+++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx
@@ -6,9 +6,9 @@ import { displayError, displaySuccess } from "components/GlobalSnackbar/utils";
import { Loader } from "components/Loader/Loader";
import { SettingsHeader } from "components/SettingsHeader/SettingsHeader";
import { Stack } from "components/Stack/Stack";
-import { RequirePermission } from "contexts/auth/RequirePermission";
import { useFeatureVisibility } from "modules/dashboard/useFeatureVisibility";
import { useOrganizationSettings } from "modules/management/OrganizationSettingsLayout";
+import { RequirePermission } from "modules/permissions/RequirePermission";
import { type FC, useEffect, useState } from "react";
import { Helmet } from "react-helmet-async";
import { useMutation, useQuery, useQueryClient } from "react-query";
diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationRedirect.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationRedirect.tsx
index b862ad41dc883..d01c9d1cda29f 100644
--- a/site/src/pages/OrganizationSettingsPage/OrganizationRedirect.tsx
+++ b/site/src/pages/OrganizationSettingsPage/OrganizationRedirect.tsx
@@ -1,6 +1,6 @@
import { EmptyState } from "components/EmptyState/EmptyState";
import { useOrganizationSettings } from "modules/management/OrganizationSettingsLayout";
-import { canEditOrganization } from "modules/management/organizationPermissions";
+import { canEditOrganization } from "modules/permissions/organizations";
import type { FC } from "react";
import { Navigate } from "react-router-dom";
@@ -10,19 +10,25 @@ const OrganizationRedirect: FC = () => {
organizationPermissionsByOrganizationId: organizationPermissions,
} = useOrganizationSettings();
+ const sortedOrganizations = [...organizations].sort(
+ (a, b) => (b.is_default ? 1 : 0) - (a.is_default ? 1 : 0),
+ );
+
// Redirect /organizations => /organizations/some-organization-name
// If they can edit the default org, we should redirect to the default.
// If they cannot edit the default, we should redirect to the first org that
// they can edit.
- const editableOrg = [...organizations]
- .sort((a, b) => (b.is_default ? 1 : 0) - (a.is_default ? 1 : 0))
- .find((org) => canEditOrganization(organizationPermissions[org.id]));
+ const editableOrg = sortedOrganizations.find((org) =>
+ canEditOrganization(organizationPermissions[org.id]),
+ );
if (editableOrg) {
return ;
}
// If they cannot edit any org, just redirect to an org they can read.
- if (organizations.length > 0) {
- return ;
+ if (sortedOrganizations.length > 0) {
+ return (
+
+ );
}
return ;
};
diff --git a/site/src/pages/TerminalPage/TerminalPage.stories.tsx b/site/src/pages/TerminalPage/TerminalPage.stories.tsx
index f50b75bac4a26..4cf052668bb06 100644
--- a/site/src/pages/TerminalPage/TerminalPage.stories.tsx
+++ b/site/src/pages/TerminalPage/TerminalPage.stories.tsx
@@ -4,7 +4,7 @@ import { workspaceByOwnerAndNameKey } from "api/queries/workspaces";
import type { Workspace, WorkspaceAgentLifecycle } from "api/typesGenerated";
import { AuthProvider } from "contexts/auth/AuthProvider";
import { RequireAuth } from "contexts/auth/RequireAuth";
-import { permissionChecks } from "contexts/auth/permissions";
+import { permissionChecks } from "modules/permissions";
import {
reactRouterOutlet,
reactRouterParameters,
diff --git a/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.stories.tsx b/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.stories.tsx
index 2d7509ac7d171..433045c625b17 100644
--- a/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.stories.tsx
+++ b/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.stories.tsx
@@ -40,7 +40,7 @@ const meta = {
},
],
user: MockUser,
- permissions: { viewDeploymentValues: true },
+ permissions: { viewDeploymentConfig: true },
},
decorators: [withGlobalSnackbar, withAuthProvider, withDashboardProvider],
} satisfies Meta;
@@ -74,7 +74,7 @@ export const ToggleNotification: Story = {
export const NonAdmin: Story = {
parameters: {
- permissions: { viewDeploymentValues: false },
+ permissions: { viewDeploymentConfig: false },
},
};
diff --git a/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.tsx b/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.tsx
index d10a5c853e56a..6e7b9ac8ab8e0 100644
--- a/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.tsx
+++ b/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.tsx
@@ -48,7 +48,7 @@ export const NotificationsPage: FC = () => {
...systemNotificationTemplates(),
select: (data: NotificationTemplate[]) => {
const groups = selectTemplatesByGroup(data);
- return permissions.viewDeploymentValues
+ return permissions.viewDeploymentConfig
? groups
: {
// Members only have access to the "Workspace Notifications" group
diff --git a/site/src/pages/UsersPage/UsersPage.stories.tsx b/site/src/pages/UsersPage/UsersPage.stories.tsx
index cd4a1cfc7e113..8a3c9bea5d013 100644
--- a/site/src/pages/UsersPage/UsersPage.stories.tsx
+++ b/site/src/pages/UsersPage/UsersPage.stories.tsx
@@ -63,7 +63,7 @@ const parameters = {
permissions: {
createUser: true,
updateUsers: true,
- viewDeploymentValues: true,
+ viewDeploymentConfig: true,
},
};
diff --git a/site/src/pages/UsersPage/UsersPage.tsx b/site/src/pages/UsersPage/UsersPage.tsx
index 81b7dfcb5ca71..9d2aaadefc96d 100644
--- a/site/src/pages/UsersPage/UsersPage.tsx
+++ b/site/src/pages/UsersPage/UsersPage.tsx
@@ -51,12 +51,12 @@ const UsersPage: FC = ({ defaultNewPassword }) => {
const {
createUser: canCreateUser,
updateUsers: canEditUsers,
- viewDeploymentValues,
+ viewDeploymentConfig,
} = permissions;
const rolesQuery = useQuery(roles());
const { data: deploymentValues } = useQuery({
...deploymentConfig(),
- enabled: viewDeploymentValues,
+ enabled: viewDeploymentConfig,
});
const usersQuery = usePaginatedQuery(paginatedUsers(searchParamsResult[0]));
@@ -94,7 +94,7 @@ const UsersPage: FC = ({ defaultNewPassword }) => {
// Indicates if oidc roles are synced from the oidc idp.
// Assign 'false' if unknown.
const oidcRoleSyncEnabled =
- viewDeploymentValues &&
+ viewDeploymentConfig &&
deploymentValues?.config.oidc?.user_role_field !== "";
const isLoading =
diff --git a/site/src/pages/WorkspacePage/Workspace.stories.tsx b/site/src/pages/WorkspacePage/Workspace.stories.tsx
index 9ff40eccaf12c..52d68d1dd0fd8 100644
--- a/site/src/pages/WorkspacePage/Workspace.stories.tsx
+++ b/site/src/pages/WorkspacePage/Workspace.stories.tsx
@@ -11,7 +11,7 @@ const permissions: WorkspacePermissions = {
readWorkspace: true,
updateWorkspace: true,
updateTemplate: true,
- viewDeploymentValues: true,
+ viewDeploymentConfig: true,
};
const meta: Meta = {
diff --git a/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.stories.tsx b/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.stories.tsx
index 055c07a248f2c..6f02d925f6485 100644
--- a/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.stories.tsx
+++ b/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.stories.tsx
@@ -15,7 +15,7 @@ const defaultPermissions = {
readWorkspace: true,
updateTemplate: true,
updateWorkspace: true,
- viewDeploymentValues: true,
+ viewDeploymentConfig: true,
};
const meta: Meta = {
diff --git a/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx b/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx
index b3f4a76cd4b3d..e4329ecad78aa 100644
--- a/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx
+++ b/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx
@@ -66,7 +66,7 @@ export const WorkspaceReadyPage: FC = ({
// Debug mode
const { data: deploymentValues } = useQuery({
...deploymentConfig(),
- enabled: permissions.viewDeploymentValues,
+ enabled: permissions.viewDeploymentConfig,
});
// Build logs
diff --git a/site/src/pages/WorkspacePage/permissions.ts b/site/src/pages/WorkspacePage/permissions.ts
index dece7d03b3921..3ac1df5a3a7fd 100644
--- a/site/src/pages/WorkspacePage/permissions.ts
+++ b/site/src/pages/WorkspacePage/permissions.ts
@@ -25,7 +25,7 @@ export const workspaceChecks = (workspace: Workspace, template: Template) =>
},
action: "update",
},
- viewDeploymentValues: {
+ viewDeploymentConfig: {
object: {
resource_type: "deployment_config",
},
diff --git a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx
index abade141d5183..e94ccbbd86605 100644
--- a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx
+++ b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx
@@ -156,7 +156,7 @@ const useWorkspacesFilter = ({
});
const { permissions } = useAuthenticated();
- const canFilterByUser = permissions.viewDeploymentValues;
+ const canFilterByUser = permissions.viewDeploymentConfig;
const userMenu = useUserFilterMenu({
value: filter.values.owner,
onChange: (option) =>
diff --git a/site/src/router.tsx b/site/src/router.tsx
index ebb9e6763d058..06e3c0d6cf892 100644
--- a/site/src/router.tsx
+++ b/site/src/router.tsx
@@ -31,8 +31,8 @@ const NotFoundPage = lazy(() => import("./pages/404Page/404Page"));
const DeploymentSettingsLayout = lazy(
() => import("./modules/management/DeploymentSettingsLayout"),
);
-const DeploymentSettingsProvider = lazy(
- () => import("./modules/management/DeploymentSettingsProvider"),
+const DeploymentConfigProvider = lazy(
+ () => import("./modules/management/DeploymentConfigProvider"),
);
const OrganizationSidebarLayout = lazy(
() => import("./modules/management/OrganizationSidebarLayout"),
@@ -98,11 +98,8 @@ const TemplateSummaryPage = lazy(
const CreateWorkspacePage = lazy(
() => import("./pages/CreateWorkspacePage/CreateWorkspacePage"),
);
-const GeneralSettingsPage = lazy(
- () =>
- import(
- "./pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPage"
- ),
+const OverviewPage = lazy(
+ () => import("./pages/DeploymentSettingsPage/OverviewPage/OverviewPage"),
);
const SecuritySettingsPage = lazy(
() =>
@@ -435,8 +432,8 @@ export const router = createBrowserRouter(
}>
- }>
- } />
+ }>
+ } />
} />
{
organizationPermissions: MockOrganizationPermissions,
}}
>
-
-
+
);
};