diff --git a/apps/web/src/components/dashboard-shell.tsx b/apps/web/src/components/dashboard-shell.tsx index a0147e4..a3ddfee 100644 --- a/apps/web/src/components/dashboard-shell.tsx +++ b/apps/web/src/components/dashboard-shell.tsx @@ -15,6 +15,7 @@ import { LayoutGrid, MenuIcon, Server, + Users, Wrench, } from "lucide-react"; import { useEffect, useState } from "react"; @@ -25,30 +26,42 @@ const dashboardLinks = [ label: "Overview", description: "Health, alerts, and recent checks", icon: LayoutGrid, + permission: "dashboard.read", }, { to: "/dashboard/servers", label: "Servers", description: "Inventory and host details", icon: Server, + permission: "servers.read", }, { to: "/dashboard/services", label: "Services", description: "Processes and uptime targets", icon: Wrench, + permission: "services.read", }, { to: "/dashboard/domains", label: "Domains", description: "DNS, SSL, and expiry status", icon: Globe, + permission: "domains.read", }, { to: "/dashboard/notes", label: "Notes", description: "Runbooks and operational handover", icon: BookText, + permission: "notes.read", + }, + { + to: "/dashboard/users", + label: "Users", + description: "Roles and permission assignments", + icon: Users, + permission: "users.read", }, ] as const; @@ -60,14 +73,18 @@ function isActive(pathname: string, to: string): boolean { function NavItems({ pathname, + permissions, onNavigate, }: { pathname: string; + permissions: string[]; onNavigate?: () => void; }) { + const allowedPermissions = new Set(permissions); + return (