Skip to content

Commit a31ff61

Browse files
committed
feat: add admin access control to runtime and user management pages
1 parent b38b532 commit a31ff61

File tree

4 files changed

+65
-6
lines changed

4 files changed

+65
-6
lines changed

src/packages/ce/src/dashboard/application/RuntimeCreatePage.tsx

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,37 @@
11
"use client"
22

33
import React from "react";
4-
import {Button, Col, Flex, Spacing, Text, TextInput, toast, useForm, useService} from "@code0-tech/pictor";
4+
import {
5+
Button,
6+
Col,
7+
Flex,
8+
Spacing,
9+
Text,
10+
TextInput,
11+
toast,
12+
useForm,
13+
useService, useStore,
14+
useUserSession
15+
} from "@code0-tech/pictor";
516
import Link from "next/link";
6-
import {useRouter} from "next/navigation";
17+
import {notFound, useRouter} from "next/navigation";
718
import {RuntimeService} from "@edition/runtime/Runtime.service";
19+
import {UserService} from "@edition/user/User.service";
820

921
export const RuntimeCreatePage: React.FC = () => {
1022

1123
const runtimeService = useService(RuntimeService)
1224
const [, startTransition] = React.useTransition()
1325
const [token, setToken] = React.useState<string | null | undefined>(undefined)
1426
const router = useRouter()
27+
const currentSession = useUserSession()
28+
const userStore = useStore(UserService)
29+
const userService = useService(UserService)
30+
const currentUser = React.useMemo(() => userService.getById(currentSession?.user?.id), [userStore, currentSession])
31+
32+
if (currentUser && !currentUser.admin) {
33+
return notFound()
34+
}
1535

1636
const [inputs, validate] = useForm({
1737
initialValues: {

src/packages/ce/src/dashboard/application/RuntimeSettingPage.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@ import {
1313
toast,
1414
useForm,
1515
useService,
16-
useStore
16+
useStore, useUserSession
1717
} from "@code0-tech/pictor";
1818
import {RuntimeService} from "@edition/runtime/Runtime.service";
1919
import {notFound, useParams, useRouter} from "next/navigation";
2020
import {Tab, TabContent, TabList, TabTrigger} from "@code0-tech/pictor/dist/components/tab/Tab";
2121
import {IconGavel, IconSettings} from "@tabler/icons-react";
2222
import CardSection from "@code0-tech/pictor/dist/components/card/CardSection";
23+
import {UserService} from "@edition/user/User.service";
2324

2425
export const RuntimeSettingPage: React.FC = () => {
2526

@@ -29,9 +30,17 @@ export const RuntimeSettingPage: React.FC = () => {
2930
const [, startTransition] = React.useTransition()
3031
const [token, setToken] = React.useState<string | null | undefined>(undefined)
3132
const router = useRouter()
33+
const currentSession = useUserSession()
34+
const userStore = useStore(UserService)
35+
const userService = useService(UserService)
36+
const currentUser = React.useMemo(() => userService.getById(currentSession?.user?.id), [userStore, currentSession])
3237

3338
const runtime = React.useMemo(() => runtimeService.getById(`gid://sagittarius/Runtime/${params.runtimeId as any}`), [runtimeStore, params])
3439

40+
if (currentUser && !currentUser.admin) {
41+
return notFound()
42+
}
43+
3544
if (runtime?.userAbilities && (!runtime?.userAbilities?.updateRuntime || !runtime.userAbilities.deleteRuntime || !runtime.userAbilities.rotateRuntimeToken)) {
3645
return notFound()
3746
}

src/packages/ce/src/dashboard/application/RuntimesPage.tsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,33 @@
11
"use client"
22

33
import React from "react";
4-
import {Button, DRuntimeList, Flex, Spacing, Text, TextInput} from "@code0-tech/pictor";
4+
import {
5+
Button,
6+
DRuntimeList,
7+
Flex,
8+
Spacing,
9+
Text,
10+
TextInput,
11+
useService,
12+
useStore,
13+
useUserSession
14+
} from "@code0-tech/pictor";
515
import {IconSearch} from "@tabler/icons-react";
616
import Link from "next/link";
7-
import {useRouter} from "next/navigation";
17+
import {notFound, useRouter} from "next/navigation";
18+
import {UserService} from "@edition/user/User.service";
819

920
export const RuntimesPage: React.FC = () => {
1021

1122
const router = useRouter()
23+
const currentSession = useUserSession()
24+
const userStore = useStore(UserService)
25+
const userService = useService(UserService)
26+
const currentUser = React.useMemo(() => userService.getById(currentSession?.user?.id), [userStore, currentSession])
27+
28+
if (currentUser && !currentUser.admin) {
29+
return notFound()
30+
}
1231

1332
return <>
1433
<Flex align={"center"} justify={"space-between"}>

src/packages/ce/src/dashboard/application/UsersPage.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,22 @@ import {
77
Flex,
88
Spacing,
99
Text,
10-
TextInput,
10+
TextInput, useService, useStore, useUserSession,
1111
} from "@code0-tech/pictor";
1212
import {IconSearch} from "@tabler/icons-react";
13+
import {UserService} from "@edition/user/User.service";
14+
import {notFound} from "next/navigation";
1315
export const UsersPage: React.FC = () => {
1416

17+
const currentSession = useUserSession()
18+
const userStore = useStore(UserService)
19+
const userService = useService(UserService)
20+
const currentUser = React.useMemo(() => userService.getById(currentSession?.user?.id), [userStore, currentSession])
21+
22+
if (currentUser && !currentUser.admin) {
23+
return notFound()
24+
}
25+
1526
return <>
1627
<Flex align={"center"} justify={"space-between"}>
1728
<Text size={"xl"} hierarchy={"primary"}>

0 commit comments

Comments
 (0)