import React from 'react'; import { Navigate, useLocation } from 'react-router-dom'; import { useAuth } from '@/contexts/AuthContext'; import { usePermissions } from '@/hooks/usePermissions'; import { Permission } from '@/types/permissions'; import { Alert } from '@/components/ui'; export interface AdminRouteProps { children: React.ReactNode; permission?: Permission | Permission[]; requireAll?: boolean; fallbackPath?: string; } /** * Route protection specifically for admin routes * Automatically checks for admin role and optional permissions */ export const AdminRoute = ({ children, permission, requireAll = false }: AdminRouteProps) => { const { isAuthenticated, isLoading } = useAuth(); const { isAdmin, checkAnyPermission, checkAllPermissions } = usePermissions(); const location = useLocation(); if (isLoading) { return (
); } if (!isAuthenticated) { return ; } if (!isAdmin) { return (
); } // Check additional permissions if specified if (permission) { const permissions = Array.isArray(permission) ? permission : [permission]; const hasAccess = requireAll ? checkAllPermissions(permissions) : checkAnyPermission(permissions); if (!hasAccess) { return (
); } } return <>{children}; };