diff --git a/frontend/src/components/layout/ProtectedRoute.tsx b/frontend/src/components/layout/ProtectedRoute.tsx index c950345e..96163c44 100644 --- a/frontend/src/components/layout/ProtectedRoute.tsx +++ b/frontend/src/components/layout/ProtectedRoute.tsx @@ -1,13 +1,16 @@ import { Navigate, useLocation } from 'react-router-dom' import { useAuthStore } from '@/store/authStore' +import { usePermissions, type EffectiveRole } from '@/hooks/usePermissions' interface ProtectedRouteProps { + requiredRole?: EffectiveRole children: React.ReactNode } -export function ProtectedRoute({ children }: ProtectedRouteProps) { +export function ProtectedRoute({ requiredRole, children }: ProtectedRouteProps) { const { isAuthenticated, isLoading } = useAuthStore() const location = useLocation() + const { effectiveRole } = usePermissions() if (isLoading) { return ( @@ -21,6 +24,18 @@ export function ProtectedRoute({ children }: ProtectedRouteProps) { return } + if (requiredRole) { + const ROLE_HIERARCHY: Record = { + super_admin: 4, + team_admin: 3, + engineer: 2, + viewer: 1, + } + if (ROLE_HIERARCHY[effectiveRole] < ROLE_HIERARCHY[requiredRole]) { + return + } + } + return <>{children} }