Skip to content

Commit aa98e27

Browse files
committed
Add changes from dashboard cloud
1 parent 5bbcb75 commit aa98e27

File tree

9 files changed

+166
-81
lines changed

9 files changed

+166
-81
lines changed

config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@
1212
"tokenSource": "$NETBIRD_TOKEN_SOURCE",
1313
"dragQueryParams": "$NETBIRD_DRAG_QUERY_PARAMS",
1414
"hotjarTrackID": "$NETBIRD_HOTJAR_TRACK_ID",
15-
"googleAnalyticsID": "$NETBIRD_GOOGLE_ANALYTICS_ID"
15+
"googleAnalyticsID": "$NETBIRD_GOOGLE_ANALYTICS_ID",
16+
"googleTagManagerID": "$NETBIRD_GOOGLE_TAG_MANAGER_ID"
1617
}

src/modules/access-tokens/AccessTokensTable.tsx

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,10 @@ export const AccessTokensTableColumns: ColumnDef<AccessToken>[] = [
6464
},
6565
];
6666

67-
export default function AccessTokensTable({ user }: Props) {
67+
export default function AccessTokensTable({ user }: Readonly<Props>) {
6868
const { data: tokens } = useFetchApi<AccessToken[]>(
6969
`/users/${user.id}/tokens`,
70+
true,
7071
);
7172

7273
const path = usePathname();
@@ -83,35 +84,33 @@ export default function AccessTokensTable({ user }: Props) {
8384
);
8485

8586
return (
86-
<>
87-
<UserProvider user={user}>
88-
<Card className={"mt-5 w-full"}>
89-
{tokens && tokens.length > 0 ? (
90-
<DataTable
91-
text={"Access Tokens"}
92-
tableClassName={"mt-0"}
93-
minimal={true}
94-
showSearchAndFilters={false}
95-
inset={false}
96-
sorting={sorting}
97-
setSorting={setSorting}
98-
columns={AccessTokensTableColumns}
99-
data={tokens}
87+
<UserProvider user={user}>
88+
<Card className={"mt-5 w-full"}>
89+
{tokens && tokens.length > 0 ? (
90+
<DataTable
91+
text={"Access Tokens"}
92+
tableClassName={"mt-0"}
93+
minimal={true}
94+
showSearchAndFilters={false}
95+
inset={false}
96+
sorting={sorting}
97+
setSorting={setSorting}
98+
columns={AccessTokensTableColumns}
99+
data={tokens}
100+
/>
101+
) : (
102+
<div className={"bg-nb-gray-950 overflow-hidden"}>
103+
<NoResults
104+
className={"py-3"}
105+
title={"No access tokens"}
106+
description={
107+
"You don't have any access tokens yet. You can add a token to access the NetBird API."
108+
}
109+
icon={<IconApi size={20} className={"fill-nb-gray-300"} />}
100110
/>
101-
) : (
102-
<div className={"bg-nb-gray-950 overflow-hidden"}>
103-
<NoResults
104-
className={"py-3"}
105-
title={"No access tokens"}
106-
description={
107-
"You don't have any access tokens yet. You can add a token to access the NetBird API."
108-
}
109-
icon={<IconApi size={20} className={"fill-nb-gray-300"} />}
110-
/>
111-
</div>
112-
)}
113-
</Card>
114-
</UserProvider>
115-
</>
111+
</div>
112+
)}
113+
</Card>
114+
</UserProvider>
116115
);
117116
}

src/modules/posture-checks/modal/PostureCheckModal.tsx

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { cn } from "@utils/helpers";
1212
import { isEmpty } from "lodash";
1313
import { ExternalLinkIcon, LayoutList, ShieldCheck, Text } from "lucide-react";
1414
import React, { useState } from "react";
15+
import { usePermissions } from "@/contexts/PermissionsProvider";
1516
import { PostureCheck } from "@/interfaces/PostureCheck";
1617
import { PostureCheckGeoLocation } from "@/modules/posture-checks/checks/PostureCheckGeoLocation";
1718
import { PostureCheckNetBirdVersion } from "@/modules/posture-checks/checks/PostureCheckNetBirdVersion";
@@ -35,6 +36,8 @@ export default function PostureCheckModal({
3536
postureCheck,
3637
useSave = true,
3738
}: Props) {
39+
const { permission } = usePermissions();
40+
3841
const {
3942
state: check,
4043
dispatch: setCheck,
@@ -54,7 +57,10 @@ export default function PostureCheckModal({
5457
!!check?.checks?.os_version_check ||
5558
!!check?.checks?.peer_network_range_check ||
5659
!!check?.checks.process_check;
57-
const canCreate = !isEmpty(check?.name) && isAtLeastOneCheckEnabled;
60+
const canCreate =
61+
!isEmpty(check?.name) &&
62+
isAtLeastOneCheckEnabled &&
63+
(permission.policies.create || permission.policies.update);
5864

5965
const [tab, setTab] = useState("checks");
6066

@@ -107,6 +113,9 @@ export default function PostureCheckModal({
107113
payload: v,
108114
})
109115
}
116+
disabled={
117+
!permission.policies.create || !permission.policies.update
118+
}
110119
/>
111120
<PostureCheckGeoLocation
112121
value={check?.checks?.geo_location_check}
@@ -116,6 +125,9 @@ export default function PostureCheckModal({
116125
payload: v,
117126
})
118127
}
128+
disabled={
129+
!permission.policies.create || !permission.policies.update
130+
}
119131
/>
120132
<PostureCheckPeerNetworkRange
121133
value={check?.checks?.peer_network_range_check}
@@ -125,6 +137,9 @@ export default function PostureCheckModal({
125137
payload: v,
126138
})
127139
}
140+
disabled={
141+
!permission.policies.create || !permission.policies.update
142+
}
128143
/>
129144
<PostureCheckOperatingSystem
130145
value={check?.checks?.os_version_check}
@@ -134,6 +149,9 @@ export default function PostureCheckModal({
134149
payload: v,
135150
})
136151
}
152+
disabled={
153+
!permission.policies.create || !permission.policies.update
154+
}
137155
/>
138156
<PostureCheckProcess
139157
value={check?.checks?.process_check}
@@ -143,6 +161,9 @@ export default function PostureCheckModal({
143161
payload: v,
144162
})
145163
}
164+
disabled={
165+
!permission.policies.create || !permission.policies.update
166+
}
146167
/>
147168
</>
148169
</TabsContent>
@@ -164,6 +185,9 @@ export default function PostureCheckModal({
164185
})
165186
}
166187
placeholder={"e.g., NetBird Version > 0.25.0"}
188+
disabled={
189+
!permission.policies.create || !permission.policies.update
190+
}
167191
/>
168192
</div>
169193
<div>
@@ -184,6 +208,9 @@ export default function PostureCheckModal({
184208
"e.g., Check if the NetBird version is bigger than 0.25.0"
185209
}
186210
rows={3}
211+
disabled={
212+
!permission.policies.create || !permission.policies.update
213+
}
187214
/>
188215
</div>
189216
</div>

src/modules/posture-checks/table/PostureCheckMinimalTable.tsx

Lines changed: 61 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
PlusCircle,
1616
} from "lucide-react";
1717
import React from "react";
18+
import { usePermissions } from "@/contexts/PermissionsProvider";
1819
import { PostureCheck } from "@/interfaces/PostureCheck";
1920
import { PostureCheckChecksCell } from "@/modules/posture-checks/table/cells/PostureCheckChecksCell";
2021
import { PostureCheckNameCell } from "@/modules/posture-checks/table/cells/PostureCheckNameCell";
@@ -35,6 +36,8 @@ export default function PostureCheckMinimalTable({
3536
onRemoveClick,
3637
onEditClick,
3738
}: Props) {
39+
const { permission } = usePermissions();
40+
3841
return data && data.length > 0 ? (
3942
<div className={""}>
4043
<div className={"flex justify-between gap-10 mb-5 items-end"}>
@@ -48,11 +51,25 @@ export default function PostureCheckMinimalTable({
4851
</HelpText>
4952
</div>
5053
<div className={"flex items-center justify-center gap-4"}>
51-
<Button variant={"secondary"} size={"xs"} onClick={onBrowseClick}>
54+
<Button
55+
variant={"secondary"}
56+
size={"xs"}
57+
onClick={onBrowseClick}
58+
disabled={
59+
!permission.policies.create || !permission.policies.update
60+
}
61+
>
5262
<FolderSearch size={14} />
5363
Browse Checks
5464
</Button>
55-
<Button variant={"primary"} size={"xs"} onClick={onAddClick}>
65+
<Button
66+
variant={"primary"}
67+
size={"xs"}
68+
onClick={onAddClick}
69+
disabled={
70+
!permission.policies.create || !permission.policies.update
71+
}
72+
>
5673
<PlusCircle size={14} />
5774
New Posture Check
5875
</Button>
@@ -71,41 +88,52 @@ export default function PostureCheckMinimalTable({
7188
className={
7289
"flex justify-between py-2 items-center hover:bg-nb-gray-900/30 rounded-md cursor-pointer px-4 transition-all"
7390
}
74-
onClick={() => onEditClick(check)}
91+
onClick={() =>
92+
(permission.policies.update || permission.policies.create) &&
93+
onEditClick(check)
94+
}
7595
>
7696
<PostureCheckNameCell small={true} check={check} />
7797
<div className={"flex gap-4 items-center"}>
7898
<PostureCheckChecksCell check={check} />
79-
<DropdownMenu modal={false}>
80-
<DropdownMenuTrigger
81-
asChild={true}
82-
onClick={(e) => {
83-
e.stopPropagation();
84-
e.preventDefault();
85-
}}
86-
>
87-
<Button variant={"default-outline"} className={"!px-3"}>
88-
<MoreVertical size={16} className={"shrink-0"} />
89-
</Button>
90-
</DropdownMenuTrigger>
91-
<DropdownMenuContent
92-
className="w-auto min-w-[200px]"
93-
align="end"
94-
>
95-
<DropdownMenuItem onClick={() => onEditClick(check)}>
96-
<div className={"flex gap-3 items-center"}>
97-
<Edit size={14} className={"shrink-0"} />
98-
Edit Posture Check
99-
</div>
100-
</DropdownMenuItem>
101-
<DropdownMenuItem onClick={() => onRemoveClick(check)}>
102-
<div className={"flex gap-3 items-center"}>
103-
<MinusCircleIcon size={14} className={"shrink-0"} />
104-
Remove Posture Check
105-
</div>
106-
</DropdownMenuItem>
107-
</DropdownMenuContent>
108-
</DropdownMenu>
99+
{(permission.policies.update || permission.policies.create) && (
100+
<DropdownMenu modal={false}>
101+
<DropdownMenuTrigger
102+
asChild={true}
103+
onClick={(e) => {
104+
e.stopPropagation();
105+
e.preventDefault();
106+
}}
107+
>
108+
<Button variant={"default-outline"} className={"!px-3"}>
109+
<MoreVertical size={16} className={"shrink-0"} />
110+
</Button>
111+
</DropdownMenuTrigger>
112+
<DropdownMenuContent
113+
className="w-auto min-w-[200px]"
114+
align="end"
115+
>
116+
<DropdownMenuItem
117+
onClick={() => onEditClick(check)}
118+
disabled={!permission.policies.update}
119+
>
120+
<div className={"flex gap-3 items-center"}>
121+
<Edit size={14} className={"shrink-0"} />
122+
Edit Posture Check
123+
</div>
124+
</DropdownMenuItem>
125+
<DropdownMenuItem
126+
onClick={() => onRemoveClick(check)}
127+
disabled={!permission.policies.delete}
128+
>
129+
<div className={"flex gap-3 items-center"}>
130+
<MinusCircleIcon size={14} className={"shrink-0"} />
131+
Remove Posture Check
132+
</div>
133+
</DropdownMenuItem>
134+
</DropdownMenuContent>
135+
</DropdownMenu>
136+
)}
109137
</div>
110138
</div>
111139
);

src/modules/posture-checks/table/PostureCheckTable.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { ExternalLinkIcon, ShieldCheck } from "lucide-react";
1515
import { usePathname } from "next/navigation";
1616
import React, { useMemo, useState } from "react";
1717
import { useSWRConfig } from "swr";
18+
import { usePermissions } from "@/contexts/PermissionsProvider";
1819
import { Policy } from "@/interfaces/Policy";
1920
import { PostureCheck } from "@/interfaces/PostureCheck";
2021
import PostureCheckModal from "@/modules/posture-checks/modal/PostureCheckModal";
@@ -70,6 +71,7 @@ export default function PostureCheckTable({
7071
isLoading,
7172
headingTarget,
7273
}: Props) {
74+
const { permission } = usePermissions();
7375
const { data: policies } = useFetchApi<Policy[]>("/policies");
7476
const { mutate } = useSWRConfig();
7577
const path = usePathname();
@@ -145,6 +147,7 @@ export default function PostureCheckTable({
145147
<Button
146148
variant={"primary"}
147149
className={"ml-auto"}
150+
disabled={!permission.policies.create}
148151
onClick={() => {
149152
setCurrentRow(undefined);
150153
setPostureCheckModal(true);

src/modules/posture-checks/table/cells/PostureCheckActionCell.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@ import { Trash2 } from "lucide-react";
66
import * as React from "react";
77
import { useSWRConfig } from "swr";
88
import { useDialog } from "@/contexts/DialogProvider";
9+
import { usePermissions } from "@/contexts/PermissionsProvider";
910
import { PostureCheck } from "@/interfaces/PostureCheck";
1011

1112
type Props = {
1213
check: PostureCheck;
1314
};
1415
export const PostureCheckActionCell = ({ check }: Props) => {
16+
const { permission } = usePermissions();
17+
1518
const deleteRequest = useApiCall("/posture-checks");
1619
const { confirm } = useDialog();
1720
const { mutate } = useSWRConfig();
@@ -56,7 +59,7 @@ export const PostureCheckActionCell = ({ check }: Props) => {
5659
variant={"danger-outline"}
5760
size={"sm"}
5861
onClick={handleDelete}
59-
disabled={hasPolicies}
62+
disabled={hasPolicies || !permission.policies.delete}
6063
>
6164
<Trash2 size={16} />
6265
Delete

0 commit comments

Comments
 (0)