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

Commit08c4fd4

Browse files
committed
feat: restrict access links to workspace owner
1 parent3878e64 commit08c4fd4

File tree

4 files changed

+44
-26
lines changed

4 files changed

+44
-26
lines changed

‎site/src/components/Resources/Resources.tsx

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import TableHead from "@material-ui/core/TableHead"
66
importTableRowfrom"@material-ui/core/TableRow"
77
importuseThemefrom"@material-ui/styles/useTheme"
88
import{FC}from"react"
9-
import{Workspace,WorkspaceResource}from"../../api/typesGenerated"
9+
import{User,Workspace,WorkspaceResource}from"../../api/typesGenerated"
1010
import{getDisplayAgentStatus}from"../../util/workspace"
1111
import{AppLink}from"../AppLink/AppLink"
1212
import{Stack}from"../Stack/Stack"
@@ -27,9 +27,10 @@ interface ResourcesProps {
2727
resources?:WorkspaceResource[]
2828
getResourcesError?:Error
2929
workspace:Workspace
30+
user?:User
3031
}
3132

32-
exportconstResources:FC<ResourcesProps>=({ resources, getResourcesError, workspace})=>{
33+
exportconstResources:FC<ResourcesProps>=({ resources, getResourcesError, workspace, user})=>{
3334
conststyles=useStyles()
3435
consttheme:Theme=useTheme()
3536

@@ -43,7 +44,7 @@ export const Resources: FC<ResourcesProps> = ({ resources, getResourcesError, wo
4344
<TableHeaderRow>
4445
<TableCell>{Language.resourceLabel}</TableCell>
4546
<TableCellclassName={styles.agentColumn}>{Language.agentLabel}</TableCell>
46-
<TableCell>{Language.accessLabel}</TableCell>
47+
{user?.username===workspace.owner_name&&<TableCell>{Language.accessLabel}</TableCell>}
4748
<TableCell>{Language.statusLabel}</TableCell>
4849
</TableHeaderRow>
4950
</TableHead>
@@ -84,28 +85,30 @@ export const Resources: FC<ResourcesProps> = ({ resources, getResourcesError, wo
8485
{agent.name}
8586
<spanclassName={styles.operatingSystem}>{agent.operating_system}</span>
8687
</TableCell>
87-
<TableCell>
88-
<Stack>
89-
{agent.status==="connected"&&(
90-
<TerminalLink
91-
className={styles.accessLink}
92-
workspaceName={workspace.name}
93-
agentName={agent.name}
94-
userName={workspace.owner_name}
95-
/>
96-
)}
97-
{agent.status==="connected"&&
98-
agent.apps.map((app)=>(
99-
<AppLink
100-
key={app.name}
101-
appIcon={app.icon}
102-
appName={app.name}
103-
userName={workspace.owner_name}
88+
{user?.username===workspace.owner_name&&(
89+
<TableCell>
90+
<Stack>
91+
{agent.status==="connected"&&(
92+
<TerminalLink
93+
className={styles.accessLink}
10494
workspaceName={workspace.name}
95+
agentName={agent.name}
96+
userName={workspace.owner_name}
10597
/>
106-
))}
107-
</Stack>
108-
</TableCell>
98+
)}
99+
{agent.status==="connected"&&
100+
agent.apps.map((app)=>(
101+
<AppLink
102+
key={app.name}
103+
appIcon={app.icon}
104+
appName={app.name}
105+
userName={workspace.owner_name}
106+
workspaceName={workspace.name}
107+
/>
108+
))}
109+
</Stack>
110+
</TableCell>
111+
)}
109112
<TableCell>
110113
<spanstyle={{color:getDisplayAgentStatus(theme,agent).color}}>
111114
{getDisplayAgentStatus(theme,agent).status}

‎site/src/components/Workspace/Workspace.stories.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ Started.args = {
2222
handleStop:action("stop"),
2323
resources:[Mocks.MockWorkspaceResource,Mocks.MockWorkspaceResource2],
2424
builds:[Mocks.MockWorkspaceBuild],
25+
user:Mocks.MockUser,
26+
}
27+
28+
exportconstOtherUser=Template.bind({})
29+
OtherUser.args={
30+
...Started.args,
31+
user:Mocks.MockUser2,
2532
}
2633

2734
exportconstStarting=Template.bind({})

‎site/src/components/Workspace/Workspace.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export interface WorkspaceProps {
2626
resources?:TypesGen.WorkspaceResource[]
2727
getResourcesError?:Error
2828
builds?:TypesGen.WorkspaceBuild[]
29+
user?:TypesGen.User
2930
}
3031

3132
/**
@@ -42,6 +43,7 @@ export const Workspace: FC<WorkspaceProps> = ({
4243
resources,
4344
getResourcesError,
4445
builds,
46+
user,
4547
})=>{
4648
conststyles=useStyles()
4749

@@ -84,7 +86,7 @@ export const Workspace: FC<WorkspaceProps> = ({
8486

8587
<WorkspaceStatsworkspace={workspace}/>
8688

87-
<Resourcesresources={resources}getResourcesError={getResourcesError}workspace={workspace}/>
89+
<Resourcesresources={resources}getResourcesError={getResourcesError}workspace={workspace}user={user}/>
8890

8991
<WorkspaceSectiontitle="Timeline"contentsProps={{className:styles.timelineContents}}>
9092
<BuildsTablebuilds={builds}className={styles.timelineTable}/>

‎site/src/pages/WorkspacePage/WorkspacePage.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import{useMachine}from"@xstate/react"
2-
importReact,{useEffect}from"react"
1+
import{useActor,useMachine}from"@xstate/react"
2+
importReact,{useContext,useEffect}from"react"
33
import{Helmet}from"react-helmet"
44
import{useNavigate,useParams}from"react-router-dom"
55
import{DeleteWorkspaceDialog}from"../../components/DeleteWorkspaceDialog/DeleteWorkspaceDialog"
@@ -10,6 +10,7 @@ import { Stack } from "../../components/Stack/Stack"
1010
import{Workspace}from"../../components/Workspace/Workspace"
1111
import{firstOrItem}from"../../util/array"
1212
import{pageTitle}from"../../util/page"
13+
import{XServiceContext}from"../../xServices/StateContext"
1314
import{workspaceMachine}from"../../xServices/workspace/workspaceXService"
1415
import{workspaceScheduleBannerMachine}from"../../xServices/workspaceSchedule/workspaceScheduleBannerXService"
1516

@@ -24,6 +25,10 @@ export const WorkspacePage: React.FC = () => {
2425

2526
const[bannerState,bannerSend]=useMachine(workspaceScheduleBannerMachine)
2627

28+
constxServices=useContext(XServiceContext)
29+
const[authState,_]=useActor(xServices.authXService)
30+
const{ me}=authState.context
31+
2732
/**
2833
* Get workspace, template, and organization on mount and whenever workspaceId changes.
2934
* workspaceSend should not change.
@@ -60,6 +65,7 @@ export const WorkspacePage: React.FC = () => {
6065
resources={resources}
6166
getResourcesError={getResourcesErrorinstanceofError ?getResourcesError :undefined}
6267
builds={builds}
68+
user={me}
6369
/>
6470
<DeleteWorkspaceDialog
6571
isOpen={workspaceState.matches({ready:{build:"askingDelete"}})}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp