Skip to content

Commit 560e8cc

Browse files
authored
fix: check update permission to start workspace (#11798)
1 parent 4616ccf commit 560e8cc

File tree

4 files changed

+20
-7
lines changed

4 files changed

+20
-7
lines changed

site/src/pages/WorkspacePage/WorkspaceActions/WorkspaceActions.tsx

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { type FC, type ReactNode, Fragment } from "react";
22
import { Workspace, WorkspaceBuildParameter } from "api/typesGenerated";
33
import { useWorkspaceDuplication } from "pages/CreateWorkspacePage/useWorkspaceDuplication";
4-
import { workspaceUpdatePolicy } from "utils/workspace";
4+
import { mustUpdateWorkspace } from "utils/workspace";
55
import { type ActionType, abilitiesByWorkspaceStatus } from "./constants";
66
import {
77
CancelButton,
@@ -79,10 +79,7 @@ export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
7979
canCancel &&
8080
(workspace.template_allow_user_cancel_workspace_jobs || isOwner);
8181

82-
const mustUpdate =
83-
workspaceUpdatePolicy(workspace, canChangeVersions) === "always" &&
84-
workspace.outdated;
85-
82+
const mustUpdate = mustUpdateWorkspace(workspace, canChangeVersions);
8683
const tooltipText = getTooltipText(workspace, mustUpdate, canChangeVersions);
8784
const canBeUpdated = workspace.outdated && canAcceptJobs;
8885

site/src/pages/WorkspacesPage/WorkspacesPage.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ const WorkspacesPage: FC = () => {
8585

8686
<WorkspacesPageView
8787
canCreateTemplate={permissions.createTemplates}
88+
canChangeVersions={permissions.updateTemplates}
8889
checkedWorkspaces={checkedWorkspaces}
8990
onCheckChange={setCheckedWorkspaces}
9091
canCheckWorkspaces={canCheckWorkspaces}

site/src/pages/WorkspacesPage/WorkspacesPageView.tsx

+6-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import KeyboardArrowDownOutlined from "@mui/icons-material/KeyboardArrowDownOutl
2626
import Divider from "@mui/material/Divider";
2727
import LoadingButton from "@mui/lab/LoadingButton";
2828
import { PaginationHeader } from "components/PaginationWidget/PaginationHeader";
29+
import { mustUpdateWorkspace } from "utils/workspace";
2930

3031
export const Language = {
3132
pageTitle: "Workspaces",
@@ -59,6 +60,7 @@ export interface WorkspacesPageViewProps {
5960
templatesFetchStatus: TemplateQuery["status"];
6061
templates: TemplateQuery["data"];
6162
canCreateTemplate: boolean;
63+
canChangeVersions: boolean;
6264
}
6365

6466
export const WorkspacesPageView = ({
@@ -81,6 +83,7 @@ export const WorkspacesPageView = ({
8183
templates,
8284
templatesFetchStatus,
8385
canCreateTemplate,
86+
canChangeVersions,
8487
}: WorkspacesPageViewProps) => {
8588
return (
8689
<Margins>
@@ -136,7 +139,9 @@ export const WorkspacesPageView = ({
136139
onClick={onStartAll}
137140
disabled={
138141
!checkedWorkspaces?.every(
139-
(w) => w.latest_build.status === "stopped",
142+
(w) =>
143+
w.latest_build.status === "stopped" &&
144+
!mustUpdateWorkspace(w, canChangeVersions),
140145
)
141146
}
142147
>

site/src/utils/workspace.tsx

+11-1
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,17 @@ export const getMatchingAgentOrFirst = (
274274
.filter((a) => a)[0];
275275
};
276276

277-
export const workspaceUpdatePolicy = (
277+
export const mustUpdateWorkspace = (
278+
workspace: TypesGen.Workspace,
279+
canChangeVersions: boolean,
280+
): boolean => {
281+
return (
282+
workspaceUpdatePolicy(workspace, canChangeVersions) === "always" &&
283+
workspace.outdated
284+
);
285+
};
286+
287+
const workspaceUpdatePolicy = (
278288
workspace: TypesGen.Workspace,
279289
canChangeVersions: boolean,
280290
): TypesGen.AutomaticUpdates => {

0 commit comments

Comments
 (0)