Merge pull request #5742 from imrja8/fix/monitoring-permissions

fix(monitoring): gate host monitoring on docker access and let docker readers see disk usage
This commit is contained in:
Yash Kumar
2026-10-22 22:49:12 +05:30
committed by GitHub
5 changed files with 38 additions and 26 deletions
@@ -60,6 +60,9 @@ export const SearchCommand = () => {
enabled: !!session,
});
const { data: isCloud } = api.settings.isCloud.useQuery();
const { data: permissions } = api.user.getPermissions.useQuery(undefined, {
enabled: !!session,
});
React.useEffect(() => {
const down = (e: KeyboardEvent) => {
@@ -183,14 +186,16 @@ export const SearchCommand = () => {
</CommandItem>
{!isCloud && (
<>
<CommandItem
onSelect={() => {
router.push("/dashboard/monitoring");
setOpen(false);
}}
>
Monitoring
</CommandItem>
{permissions?.monitoring.read && permissions?.docker.read && (
<CommandItem
onSelect={() => {
router.push("/dashboard/monitoring");
setOpen(false);
}}
>
Monitoring
</CommandItem>
)}
<CommandItem
onSelect={() => {
router.push("/dashboard/traefik");
+4 -2
View File
@@ -192,9 +192,11 @@ const MENU: Menu = {
title: "Monitoring",
url: "/dashboard/monitoring",
icon: BarChartHorizontalBigIcon,
// Only enabled in non-cloud environments and if user has monitoring.read
// Only enabled in non-cloud environments (product decision) and if user has monitoring.read and docker.read
isEnabled: ({ isCloud, permissions }) =>
!isCloud && !!permissions?.monitoring.read,
!isCloud &&
!!permissions?.monitoring.read &&
!!permissions?.docker.read,
},
{
isSingle: true,
+10 -8
View File
@@ -87,14 +87,16 @@ export const UserNav = () => {
</DropdownMenuItem>
{!isCloud ? (
<>
<DropdownMenuItem
className="cursor-pointer"
onClick={() => {
router.push("/dashboard/monitoring");
}}
>
Monitoring
</DropdownMenuItem>
{permissions?.monitoring.read && permissions?.docker.read && (
<DropdownMenuItem
className="cursor-pointer"
onClick={() => {
router.push("/dashboard/monitoring");
}}
>
Monitoring
</DropdownMenuItem>
)}
{permissions?.traefikFiles.read && (
<DropdownMenuItem
className="cursor-pointer"
+9 -7
View File
@@ -109,13 +109,15 @@ export async function getServerSideProps(
};
}
const canView = await hasPermission(
{
user: { id: user.id },
session: { activeOrganizationId: session?.activeOrganizationId || "" },
},
{ monitoring: ["read"] },
);
const permissionCtx = {
user: { id: user.id },
session: { activeOrganizationId: session?.activeOrganizationId || "" },
};
const [canReadMonitoring, canReadDocker] = await Promise.all([
hasPermission(permissionCtx, { monitoring: ["read"] }),
hasPermission(permissionCtx, { docker: ["read"] }),
]);
const canView = canReadMonitoring && canReadDocker;
if (!canView) {
return {
+2 -1
View File
@@ -80,6 +80,7 @@ import {
enterpriseProcedure,
protectedProcedure,
publicProcedure,
withPermission,
} from "../trpc";
/**
@@ -284,7 +285,7 @@ export const settingsRouter = createTRPCRouter({
});
return true;
}),
getDockerDiskUsage: adminProcedure.query(async () => {
getDockerDiskUsage: withPermission("docker", "read").query(async () => {
if (IS_CLOUD) {
return [];
}