Skip to content

Commit ae67e33

Browse files
authored
fix: set permissions for experimental Createworkspace page (#17254)
1 parent 510bc37 commit ae67e33

13 files changed

+54
-47
lines changed

site/src/modules/permissions/workspaces.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ export const workspacePermissionChecks = (
33
userId: string,
44
) =>
55
({
6-
createWorkspace: {
6+
createWorkspaceForUserID: {
77
object: {
88
resource_type: "workspace",
99
organization_id: organizationId,

site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ import { pageTitle } from "utils/page";
2626
import type { AutofillBuildParameter } from "utils/richParameters";
2727
import { paramsUsedToCreateWorkspace } from "utils/workspace";
2828
import { CreateWorkspacePageView } from "./CreateWorkspacePageView";
29-
import { type CreateWSPermissions, createWorkspaceChecks } from "./permissions";
29+
import {
30+
type CreateWorkspacePermissions,
31+
createWorkspaceChecks,
32+
} from "./permissions";
3033

3134
export const createWorkspaceModes = ["form", "auto", "duplicate"] as const;
3235
export type CreateWorkspaceMode = (typeof createWorkspaceModes)[number];
@@ -206,7 +209,7 @@ const CreateWorkspacePage: FC = () => {
206209
externalAuthPollingState={externalAuthPollingState}
207210
startPollingExternalAuth={startPollingExternalAuth}
208211
hasAllRequiredExternalAuth={hasAllRequiredExternalAuth}
209-
permissions={permissionsQuery.data as CreateWSPermissions}
212+
permissions={permissionsQuery.data as CreateWorkspacePermissions}
210213
parameters={realizedParameters as TemplateVersionParameter[]}
211214
presets={templateVersionPresetsQuery.data ?? []}
212215
creatingWorkspace={createWorkspaceMutation.isLoading}

site/src/pages/CreateWorkspacePage/CreateWorkspacePageExperimental.tsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,6 @@ import { Loader } from "components/Loader/Loader";
1717
import { useAuthenticated } from "contexts/auth/RequireAuth";
1818
import { useEffectEvent } from "hooks/hookPolyfills";
1919
import { useDashboard } from "modules/dashboard/useDashboard";
20-
import {
21-
type WorkspacePermissions,
22-
workspacePermissionChecks,
23-
} from "modules/permissions/workspaces";
2420
import { generateWorkspaceName } from "modules/workspaces/generateWorkspaceName";
2521
import { type FC, useCallback, useEffect, useRef, useState } from "react";
2622
import { Helmet } from "react-helmet-async";
@@ -32,6 +28,10 @@ import { paramsUsedToCreateWorkspace } from "utils/workspace";
3228
import { CreateWorkspacePageViewExperimental } from "./CreateWorkspacePageViewExperimental";
3329
export const createWorkspaceModes = ["form", "auto", "duplicate"] as const;
3430
export type CreateWorkspaceMode = (typeof createWorkspaceModes)[number];
31+
import {
32+
type CreateWorkspacePermissions,
33+
createWorkspaceChecks,
34+
} from "./permissions";
3535

3636
export type ExternalAuthPollingState = "idle" | "polling" | "abandoned";
3737

@@ -66,10 +66,7 @@ const CreateWorkspacePageExperimental: FC = () => {
6666
const permissionsQuery = useQuery(
6767
templateQuery.data
6868
? checkAuthorization({
69-
checks: workspacePermissionChecks(
70-
templateQuery.data.organization_id,
71-
me.id,
72-
),
69+
checks: createWorkspaceChecks(templateQuery.data.organization_id),
7370
})
7471
: { enabled: false },
7572
);
@@ -211,7 +208,7 @@ const CreateWorkspacePageExperimental: FC = () => {
211208
externalAuthPollingState={externalAuthPollingState}
212209
startPollingExternalAuth={startPollingExternalAuth}
213210
hasAllRequiredExternalAuth={hasAllRequiredExternalAuth}
214-
permissions={permissionsQuery.data as WorkspacePermissions}
211+
permissions={permissionsQuery.data as CreateWorkspacePermissions}
215212
parameters={realizedParameters as TemplateVersionParameter[]}
216213
presets={templateVersionPresetsQuery.data ?? []}
217214
creatingWorkspace={createWorkspaceMutation.isLoading}

site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const meta: Meta<typeof CreateWorkspacePageView> = {
2727
hasAllRequiredExternalAuth: true,
2828
mode: "form",
2929
permissions: {
30-
createWorkspaceForUser: true,
30+
createWorkspaceForAny: true,
3131
},
3232
onCancel: action("onCancel"),
3333
},

site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import type {
4646
ExternalAuthPollingState,
4747
} from "./CreateWorkspacePage";
4848
import { ExternalAuthButton } from "./ExternalAuthButton";
49-
import type { CreateWSPermissions } from "./permissions";
49+
import type { CreateWorkspacePermissions } from "./permissions";
5050
export const Language = {
5151
duplicationWarning:
5252
"Duplicating a workspace only copies its parameters. No state from the old workspace is copied over.",
@@ -68,7 +68,7 @@ export interface CreateWorkspacePageViewProps {
6868
parameters: TypesGen.TemplateVersionParameter[];
6969
autofillParameters: AutofillBuildParameter[];
7070
presets: TypesGen.Preset[];
71-
permissions: CreateWSPermissions;
71+
permissions: CreateWorkspacePermissions;
7272
creatingWorkspace: boolean;
7373
onCancel: () => void;
7474
onSubmit: (
@@ -255,7 +255,7 @@ export const CreateWorkspacePageView: FC<CreateWorkspacePageViewProps> = ({
255255
<FormSection
256256
title="General"
257257
description={
258-
permissions.createWorkspaceForUser
258+
permissions.createWorkspaceForAny
259259
? "The name of the workspace and its owner. Only admins can create workspaces for other users."
260260
: "The name of your new workspace."
261261
}
@@ -300,7 +300,7 @@ export const CreateWorkspacePageView: FC<CreateWorkspacePageViewProps> = ({
300300
</FormHelperText>
301301
</div>
302302

303-
{permissions.createWorkspaceForUser && (
303+
{permissions.createWorkspaceForAny && (
304304
<UserAutocomplete
305305
value={owner}
306306
onChange={(user) => {

site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import { Stack } from "components/Stack/Stack";
1515
import { UserAutocomplete } from "components/UserAutocomplete/UserAutocomplete";
1616
import { type FormikContextType, useFormik } from "formik";
1717
import { ArrowLeft } from "lucide-react";
18-
import type { WorkspacePermissions } from "modules/permissions/workspaces";
1918
import { generateWorkspaceName } from "modules/workspaces/generateWorkspaceName";
2019
import {
2120
type FC,
@@ -37,7 +36,7 @@ import type {
3736
ExternalAuthPollingState,
3837
} from "./CreateWorkspacePage";
3938
import { ExternalAuthButton } from "./ExternalAuthButton";
40-
39+
import type { CreateWorkspacePermissions } from "./permissions";
4140
export const Language = {
4241
duplicationWarning:
4342
"Duplicating a workspace only copies its parameters. No state from the old workspace is copied over.",
@@ -59,7 +58,7 @@ export interface CreateWorkspacePageViewExperimentalProps {
5958
parameters: TypesGen.TemplateVersionParameter[];
6059
autofillParameters: AutofillBuildParameter[];
6160
presets: TypesGen.Preset[];
62-
permissions: WorkspacePermissions;
61+
permissions: CreateWorkspacePermissions;
6362
creatingWorkspace: boolean;
6463
onCancel: () => void;
6564
onSubmit: (
@@ -253,7 +252,7 @@ export const CreateWorkspacePageViewExperimental: FC<
253252
<hgroup>
254253
<h2 className="text-xl font-semibold m-0">General</h2>
255254
<p className="text-sm text-content-secondary mt-0">
256-
{permissions.createWorkspace
255+
{permissions.createWorkspaceForAny
257256
? "Only admins can create workspaces for other users."
258257
: "The name of your new workspace."}
259258
</p>
@@ -300,7 +299,7 @@ export const CreateWorkspacePageViewExperimental: FC<
300299
</div>
301300
</div>
302301
</div>
303-
{permissions.createWorkspace && (
302+
{permissions.createWorkspaceForAny && (
304303
<div className="flex flex-col gap-2 flex-1">
305304
<Label className="text-sm" htmlFor={`${id}-workspace-name`}>
306305
Owner
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export const createWorkspaceChecks = (organizationId: string) =>
22
({
3-
createWorkspaceForUser: {
3+
createWorkspaceForAny: {
44
object: {
55
resource_type: "workspace",
66
organization_id: organizationId,
@@ -10,7 +10,7 @@ export const createWorkspaceChecks = (organizationId: string) =>
1010
},
1111
}) as const;
1212

13-
export type CreateWSPermissions = Record<
13+
export type CreateWorkspacePermissions = Record<
1414
keyof ReturnType<typeof createWorkspaceChecks>,
1515
boolean
1616
>;

site/src/pages/TemplatePage/TemplateLayout.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import { Loader } from "components/Loader/Loader";
66
import { Margins } from "components/Margins/Margins";
77
import { TabLink, Tabs, TabsList } from "components/Tabs/Tabs";
88
import { useAuthenticated } from "contexts/auth/RequireAuth";
9-
import { workspacePermissionChecks } from "modules/permissions/workspaces";
9+
import {
10+
type WorkspacePermissions,
11+
workspacePermissionChecks,
12+
} from "modules/permissions/workspaces";
1013
import {
1114
type FC,
1215
type PropsWithChildren,
@@ -113,7 +116,9 @@ export const TemplateLayout: FC<PropsWithChildren> = ({
113116
template={data.template}
114117
activeVersion={data.activeVersion}
115118
permissions={data.permissions}
116-
workspacePermissions={workspacePermissionsQuery.data}
119+
workspacePermissions={
120+
workspacePermissionsQuery.data as WorkspacePermissions
121+
}
117122
onDeleteTemplate={() => {
118123
navigate("/templates");
119124
}}

site/src/pages/TemplatePage/TemplatePageHeader.stories.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const meta: Meta<typeof TemplatePageHeader> = {
1414
canUpdateTemplate: true,
1515
},
1616
workspacePermissions: {
17-
createWorkspace: true,
17+
createWorkspaceForUserID: true,
1818
},
1919
},
2020
};
@@ -35,7 +35,7 @@ export const CanNotUpdate: Story = {
3535
export const CannotCreateWorkspace: Story = {
3636
args: {
3737
workspacePermissions: {
38-
createWorkspace: false,
38+
createWorkspaceForUserID: false,
3939
},
4040
},
4141
};

site/src/pages/TemplatePage/TemplatePageHeader.tsx

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
import { Pill } from "components/Pill/Pill";
3232
import { Stack } from "components/Stack/Stack";
3333
import { linkToTemplate, useLinks } from "modules/navigation";
34+
import type { WorkspacePermissions } from "modules/permissions/workspaces";
3435
import type { FC } from "react";
3536
import { useQuery } from "react-query";
3637
import { Link as RouterLink, useNavigate } from "react-router-dom";
@@ -158,7 +159,7 @@ export type TemplatePageHeaderProps = {
158159
template: Template;
159160
activeVersion: TemplateVersion;
160161
permissions: AuthorizationResponse;
161-
workspacePermissions: AuthorizationResponse;
162+
workspacePermissions: WorkspacePermissions;
162163
onDeleteTemplate: () => void;
163164
};
164165

@@ -179,16 +180,17 @@ export const TemplatePageHeader: FC<TemplatePageHeaderProps> = ({
179180
<PageHeader
180181
actions={
181182
<>
182-
{!template.deprecated && workspacePermissions.createWorkspace && (
183-
<Button
184-
variant="contained"
185-
startIcon={<AddIcon />}
186-
component={RouterLink}
187-
to={`${templateLink}/workspace`}
188-
>
189-
Create Workspace
190-
</Button>
191-
)}
183+
{!template.deprecated &&
184+
workspacePermissions.createWorkspaceForUserID && (
185+
<Button
186+
variant="contained"
187+
startIcon={<AddIcon />}
188+
component={RouterLink}
189+
to={`${templateLink}/workspace`}
190+
>
191+
Create Workspace
192+
</Button>
193+
)}
192194

193195
{permissions.canUpdateTemplate && (
194196
<TemplateMenu

0 commit comments

Comments
 (0)
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