mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-10-23 08:55:25 +00:00
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:
@@ -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");
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 [];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user