Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitccfe1bd

Browse files
authored
fix: fix permissions for workspace creation (#17241)
This fixes the permissions check when creating a workspace by settingthe owner_id to the current user's id. This was originally settingowner_id to *```createWorkspace: {object: {resource_type: "workspace",organization_id: organizationId,owner_id: userId,},action: "create",},```
1 parentb61f0ab commitccfe1bd

File tree

12 files changed

+54
-36
lines changed

12 files changed

+54
-36
lines changed

‎site/src/api/queries/organizations.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ export const organizationsPermissions = (
306306

307307
exportconstworkspacePermissionsByOrganization=(
308308
organizationIds:string[]|undefined,
309+
userId:string,
309310
)=>{
310311
if(!organizationIds){
311312
return{enabled:false};
@@ -315,10 +316,9 @@ export const workspacePermissionsByOrganization = (
315316
queryKey:["workspaces",organizationIds.sort(),"permissions"],
316317
queryFn:async()=>{
317318
constprefixedChecks=organizationIds.flatMap((orgId)=>
318-
Object.entries(workspacePermissionChecks(orgId)).map(([key,val])=>[
319-
`${orgId}.${key}`,
320-
val,
321-
]),
319+
Object.entries(workspacePermissionChecks(orgId,userId)).map(
320+
([key,val])=>[`${orgId}.${key}`,val],
321+
),
322322
);
323323

324324
constresponse=awaitAPI.checkAuthorization({

‎site/src/modules/permissions/workspaces.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
exportconstworkspacePermissionChecks=(organizationId:string)=>
1+
exportconstworkspacePermissionChecks=(
2+
organizationId:string,
3+
userId:string,
4+
)=>
25
({
3-
createWorkspaceForUser:{
6+
createWorkspace:{
47
object:{
58
resource_type:"workspace",
69
organization_id:organizationId,
7-
owner_id:"*",
10+
owner_id:userId,
811
},
912
action:"create",
1013
},

‎site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx

Lines changed: 3 additions & 6 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-
typeWorkspacePermissions,
22-
workspacePermissionChecks,
23-
}from"modules/permissions/workspaces";
2420
import{generateWorkspaceName}from"modules/workspaces/generateWorkspaceName";
2521
import{typeFC,useCallback,useEffect,useRef,useState}from"react";
2622
import{Helmet}from"react-helmet-async";
@@ -30,6 +26,7 @@ import { pageTitle } from "utils/page";
3026
importtype{AutofillBuildParameter}from"utils/richParameters";
3127
import{paramsUsedToCreateWorkspace}from"utils/workspace";
3228
import{CreateWorkspacePageView}from"./CreateWorkspacePageView";
29+
import{typeCreateWSPermissions,createWorkspaceChecks}from"./permissions";
3330

3431
exportconstcreateWorkspaceModes=["form","auto","duplicate"]asconst;
3532
exporttypeCreateWorkspaceMode=(typeofcreateWorkspaceModes)[number];
@@ -67,7 +64,7 @@ const CreateWorkspacePage: FC = () => {
6764
constpermissionsQuery=useQuery(
6865
templateQuery.data
6966
?checkAuthorization({
70-
checks:workspacePermissionChecks(templateQuery.data.organization_id),
67+
checks:createWorkspaceChecks(templateQuery.data.organization_id),
7168
})
7269
:{enabled:false},
7370
);
@@ -209,7 +206,7 @@ const CreateWorkspacePage: FC = () => {
209206
externalAuthPollingState={externalAuthPollingState}
210207
startPollingExternalAuth={startPollingExternalAuth}
211208
hasAllRequiredExternalAuth={hasAllRequiredExternalAuth}
212-
permissions={permissionsQuery.dataasWorkspacePermissions}
209+
permissions={permissionsQuery.dataasCreateWSPermissions}
213210
parameters={realizedParametersasTemplateVersionParameter[]}
214211
presets={templateVersionPresetsQuery.data??[]}
215212
creatingWorkspace={createWorkspaceMutation.isLoading}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import { Stack } from "components/Stack/Stack";
2828
import{Switch}from"components/Switch/Switch";
2929
import{UserAutocomplete}from"components/UserAutocomplete/UserAutocomplete";
3030
import{typeFormikContextType,useFormik}from"formik";
31-
importtype{WorkspacePermissions}from"modules/permissions/workspaces";
3231
import{generateWorkspaceName}from"modules/workspaces/generateWorkspaceName";
3332
import{typeFC,useCallback,useEffect,useMemo,useState}from"react";
3433
import{
@@ -47,7 +46,7 @@ import type {
4746
ExternalAuthPollingState,
4847
}from"./CreateWorkspacePage";
4948
import{ExternalAuthButton}from"./ExternalAuthButton";
50-
49+
importtype{CreateWSPermissions}from"./permissions";
5150
exportconstLanguage={
5251
duplicationWarning:
5352
"Duplicating a workspace only copies its parameters. No state from the old workspace is copied over.",
@@ -69,7 +68,7 @@ export interface CreateWorkspacePageViewProps {
6968
parameters:TypesGen.TemplateVersionParameter[];
7069
autofillParameters:AutofillBuildParameter[];
7170
presets:TypesGen.Preset[];
72-
permissions:WorkspacePermissions;
71+
permissions:CreateWSPermissions;
7372
creatingWorkspace:boolean;
7473
onCancel:()=>void;
7574
onSubmit:(
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
exportconstcreateWorkspaceChecks=(organizationId:string)=>
2+
({
3+
createWorkspaceForUser:{
4+
object:{
5+
resource_type:"workspace",
6+
organization_id:organizationId,
7+
owner_id:"*",
8+
},
9+
action:"create",
10+
},
11+
})asconst;
12+
13+
exporttypeCreateWSPermissions=Record<
14+
keyofReturnType<typeofcreateWorkspaceChecks>,
15+
boolean
16+
>;

‎site/src/pages/TemplatePage/TemplateLayout.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { ErrorAlert } from "components/Alert/ErrorAlert";
55
import{Loader}from"components/Loader/Loader";
66
import{Margins}from"components/Margins/Margins";
77
import{TabLink,Tabs,TabsList}from"components/Tabs/Tabs";
8+
import{useAuthenticated}from"contexts/auth/RequireAuth";
89
import{workspacePermissionChecks}from"modules/permissions/workspaces";
910
import{
1011
typeFC,
@@ -73,6 +74,7 @@ export const TemplateLayout: FC<PropsWithChildren> = ({
7374
children=<Outlet/>,
7475
})=>{
7576
constnavigate=useNavigate();
77+
const{user:me}=useAuthenticated();
7678
const{organization:organizationName="default",template:templateName}=
7779
useParams()as{organization?:string;template:string};
7880
const{ data, error, isLoading}=useQuery({
@@ -81,7 +83,7 @@ export const TemplateLayout: FC<PropsWithChildren> = ({
8183
});
8284
constworkspacePermissionsQuery=useQuery(
8385
checkAuthorization({
84-
checks:workspacePermissionChecks(organizationName),
86+
checks:workspacePermissionChecks(organizationName,me.id),
8587
}),
8688
);
8789

‎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-
createWorkspaceForUser:true,
17+
createWorkspace:true,
1818
},
1919
},
2020
};
@@ -35,7 +35,7 @@ export const CanNotUpdate: Story = {
3535
exportconstCannotCreateWorkspace:Story={
3636
args:{
3737
workspacePermissions:{
38-
createWorkspaceForUser:false,
38+
createWorkspace:false,
3939
},
4040
},
4141
};

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

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -179,17 +179,16 @@ export const TemplatePageHeader: FC<TemplatePageHeaderProps> = ({
179179
<PageHeader
180180
actions={
181181
<>
182-
{!template.deprecated&&
183-
workspacePermissions.createWorkspaceForUser&&(
184-
<Button
185-
variant="contained"
186-
startIcon={<AddIcon/>}
187-
component={RouterLink}
188-
to={`${templateLink}/workspace`}
189-
>
190-
Create Workspace
191-
</Button>
192-
)}
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+
)}
193192

194193
{permissions.canUpdateTemplate&&(
195194
<TemplateMenu

‎site/src/pages/TemplatesPage/TemplatesPage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { pageTitle } from "utils/page";
1111
import{TemplatesPageView}from"./TemplatesPageView";
1212

1313
exportconstTemplatesPage:FC=()=>{
14-
const{ permissions}=useAuthenticated();
14+
const{ permissions,user:me}=useAuthenticated();
1515
const{ showOrganizations}=useDashboard();
1616

1717
constsearchParamsResult=useSearchParams();
@@ -30,6 +30,7 @@ export const TemplatesPage: FC = () => {
3030
constworkspacePermissionsQuery=useQuery(
3131
workspacePermissionsByOrganization(
3232
templatesQuery.data?.map((template)=>template.organization_id),
33+
me.id,
3334
),
3435
);
3536

‎site/src/pages/TemplatesPage/TemplatesPageView.stories.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export const WithTemplates: Story = {
7676
examples:[],
7777
workspacePermissions:{
7878
[MockTemplate.organization_id]:{
79-
createWorkspaceForUser:true,
79+
createWorkspace:true,
8080
},
8181
},
8282
},
@@ -94,7 +94,7 @@ export const CannotCreateWorkspaces: Story = {
9494
...WithTemplates.args,
9595
workspacePermissions:{
9696
[MockTemplate.organization_id]:{
97-
createWorkspaceForUser:false,
97+
createWorkspace:false,
9898
},
9999
},
100100
},

‎site/src/pages/TemplatesPage/TemplatesPageView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ const TemplateRow: FC<TemplateRowProps> = ({
160160
{template.deprecated ?(
161161
<DeprecatedBadge/>
162162
) :workspacePermissions?.[template.organization_id]
163-
?.createWorkspaceForUser ?(
163+
?.createWorkspace ?(
164164
<MuiButton
165165
size="small"
166166
css={styles.actionButton}

‎site/src/pages/WorkspacesPage/WorkspacesPage.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,15 @@ const WorkspacesPage: FC = () => {
4040
// each hook.
4141
constsearchParamsResult=useSafeSearchParams();
4242
constpagination=usePagination({ searchParamsResult});
43-
const{ permissions}=useAuthenticated();
43+
const{ permissions,user:me}=useAuthenticated();
4444
const{ entitlements}=useDashboard();
4545

4646
consttemplatesQuery=useQuery(templates());
4747

4848
constorgPermissionsQuery=useQuery(
4949
workspacePermissionsByOrganization(
5050
templatesQuery.data?.map((template)=>template.organization_id),
51+
me.id,
5152
),
5253
);
5354

@@ -59,7 +60,7 @@ const WorkspacesPage: FC = () => {
5960

6061
returntemplatesQuery.data.filter((template)=>{
6162
constorgPermission=orgPermissionsQuery.data[template.organization_id];
62-
returnorgPermission?.createWorkspaceForUser;
63+
returnorgPermission?.createWorkspace;
6364
});
6465
},[templatesQuery.data,orgPermissionsQuery.data]);
6566

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp