import { ReactNode } from "react"; import { usePermissions } from "@/hooks/usePermissions"; interface PermissionGuardProps { /** * Permission code required to render children */ permission?: string; /** * Array of permission codes - if ANY are matched, children will render */ anyPermissions?: string[]; /** * Array of permission codes - ALL must match to render children */ allPermissions?: string[]; /** * If true, renders children if the user is an admin */ adminOnly?: boolean; /** * If true, renders children if the user can access the specified page */ page?: string; /** * Fallback component to render if permissions check fails */ fallback?: ReactNode; /** * Children to render if permissions check passes */ children: ReactNode; } /** * Component that conditionally renders its children based on user permissions */ export function PermissionGuard({ permission, anyPermissions, allPermissions, adminOnly, page, fallback = null, children }: PermissionGuardProps) { const { hasPermission, hasAnyPermission, hasAllPermissions, hasPageAccess, isAdmin } = usePermissions(); // Admin check if (adminOnly && !isAdmin) { return <>{fallback}; } // Page access check if (page && !hasPageAccess(page)) { return <>{fallback}; } // Single permission check if (permission && !hasPermission(permission)) { return <>{fallback}; } // Any permissions check if (anyPermissions && !hasAnyPermission(anyPermissions)) { return <>{fallback}; } // All permissions check if (allPermissions && !hasAllPermissions(allPermissions)) { return <>{fallback}; } // If all checks pass, render children return <>{children}; }