mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix: check update permission to start workspace (#11798)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { type FC, type ReactNode, Fragment } from "react";
|
||||
import { Workspace, WorkspaceBuildParameter } from "api/typesGenerated";
|
||||
import { useWorkspaceDuplication } from "pages/CreateWorkspacePage/useWorkspaceDuplication";
|
||||
import { workspaceUpdatePolicy } from "utils/workspace";
|
||||
import { mustUpdateWorkspace } from "utils/workspace";
|
||||
import { type ActionType, abilitiesByWorkspaceStatus } from "./constants";
|
||||
import {
|
||||
CancelButton,
|
||||
@@ -79,10 +79,7 @@ export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
|
||||
canCancel &&
|
||||
(workspace.template_allow_user_cancel_workspace_jobs || isOwner);
|
||||
|
||||
const mustUpdate =
|
||||
workspaceUpdatePolicy(workspace, canChangeVersions) === "always" &&
|
||||
workspace.outdated;
|
||||
|
||||
const mustUpdate = mustUpdateWorkspace(workspace, canChangeVersions);
|
||||
const tooltipText = getTooltipText(workspace, mustUpdate, canChangeVersions);
|
||||
const canBeUpdated = workspace.outdated && canAcceptJobs;
|
||||
|
||||
|
||||
@@ -85,6 +85,7 @@ const WorkspacesPage: FC = () => {
|
||||
|
||||
<WorkspacesPageView
|
||||
canCreateTemplate={permissions.createTemplates}
|
||||
canChangeVersions={permissions.updateTemplates}
|
||||
checkedWorkspaces={checkedWorkspaces}
|
||||
onCheckChange={setCheckedWorkspaces}
|
||||
canCheckWorkspaces={canCheckWorkspaces}
|
||||
|
||||
@@ -26,6 +26,7 @@ import KeyboardArrowDownOutlined from "@mui/icons-material/KeyboardArrowDownOutl
|
||||
import Divider from "@mui/material/Divider";
|
||||
import LoadingButton from "@mui/lab/LoadingButton";
|
||||
import { PaginationHeader } from "components/PaginationWidget/PaginationHeader";
|
||||
import { mustUpdateWorkspace } from "utils/workspace";
|
||||
|
||||
export const Language = {
|
||||
pageTitle: "Workspaces",
|
||||
@@ -59,6 +60,7 @@ export interface WorkspacesPageViewProps {
|
||||
templatesFetchStatus: TemplateQuery["status"];
|
||||
templates: TemplateQuery["data"];
|
||||
canCreateTemplate: boolean;
|
||||
canChangeVersions: boolean;
|
||||
}
|
||||
|
||||
export const WorkspacesPageView = ({
|
||||
@@ -81,6 +83,7 @@ export const WorkspacesPageView = ({
|
||||
templates,
|
||||
templatesFetchStatus,
|
||||
canCreateTemplate,
|
||||
canChangeVersions,
|
||||
}: WorkspacesPageViewProps) => {
|
||||
return (
|
||||
<Margins>
|
||||
@@ -136,7 +139,9 @@ export const WorkspacesPageView = ({
|
||||
onClick={onStartAll}
|
||||
disabled={
|
||||
!checkedWorkspaces?.every(
|
||||
(w) => w.latest_build.status === "stopped",
|
||||
(w) =>
|
||||
w.latest_build.status === "stopped" &&
|
||||
!mustUpdateWorkspace(w, canChangeVersions),
|
||||
)
|
||||
}
|
||||
>
|
||||
|
||||
@@ -274,7 +274,17 @@ export const getMatchingAgentOrFirst = (
|
||||
.filter((a) => a)[0];
|
||||
};
|
||||
|
||||
export const workspaceUpdatePolicy = (
|
||||
export const mustUpdateWorkspace = (
|
||||
workspace: TypesGen.Workspace,
|
||||
canChangeVersions: boolean,
|
||||
): boolean => {
|
||||
return (
|
||||
workspaceUpdatePolicy(workspace, canChangeVersions) === "always" &&
|
||||
workspace.outdated
|
||||
);
|
||||
};
|
||||
|
||||
const workspaceUpdatePolicy = (
|
||||
workspace: TypesGen.Workspace,
|
||||
canChangeVersions: boolean,
|
||||
): TypesGen.AutomaticUpdates => {
|
||||
|
||||
Reference in New Issue
Block a user