40227-vm/frontend/src/app/ModuleRouteGuard.tsx
2026-06-12 08:51:17 +02:00

28 lines
867 B
TypeScript

import type { ReactNode } from 'react';
import { Suspense } from 'react';
import { useLocation } from 'react-router-dom';
import { useShellOutletContext } from '@/app/shellOutletContext';
import { PageSkeleton } from '@/components/ui/page-skeleton';
import { canUserRoleAccessModuleRoute } from '@/shared/constants/moduleRoutes';
import NotFound from '@/pages/NotFound';
interface ModuleRouteGuardProps {
readonly children: ReactNode;
}
export function ModuleRouteGuard({ children }: ModuleRouteGuardProps) {
const location = useLocation();
const shell = useShellOutletContext();
// Forbidden direct-URL access lands on the 404 page (not a silent redirect).
if (!canUserRoleAccessModuleRoute(location.pathname, shell.userRole)) {
return <NotFound />;
}
return (
<Suspense fallback={<PageSkeleton />}>
{children}
</Suspense>
);
}