Implemented rbac
This commit is contained in:
@@ -3,6 +3,7 @@ import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
||||
import { QueryClientProvider } from '@tanstack/react-query';
|
||||
import { queryClient } from './lib/queryClient';
|
||||
import { AuthProvider, ProtectedRoute, TenantAdminProtectedRoute } from './auth/AuthProvider';
|
||||
import { ClaimProtectedRoute, useRbac } from './auth/rbac';
|
||||
import { ToastProvider } from './components/ui/Toast';
|
||||
import { AppLayout } from './components/layout/AppLayout';
|
||||
|
||||
@@ -27,6 +28,18 @@ const RouteLoading = () => (
|
||||
</div>
|
||||
);
|
||||
|
||||
const DefaultRouteRedirect = () => {
|
||||
const { canView } = useRbac();
|
||||
if (canView('dashboard')) return <Navigate to="/dashboard" replace />;
|
||||
if (canView('projects_milestones')) return <Navigate to="/projects" replace />;
|
||||
if (canView('grant_financials')) return <Navigate to="/grants" replace />;
|
||||
if (canView('evidence_risks')) return <Navigate to="/monitoring" replace />;
|
||||
if (canView('governance')) return <Navigate to="/governance" replace />;
|
||||
if (canView('beneficiaries')) return <Navigate to="/projects/beneficiaries" replace />;
|
||||
if (canView('settings_users') || canView('settings_invites')) return <Navigate to="/settings" replace />;
|
||||
return <Navigate to="/projects" replace />;
|
||||
};
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<QueryClientProvider client={queryClient}>
|
||||
@@ -47,17 +60,94 @@ export default function App() {
|
||||
</ProtectedRoute>
|
||||
}
|
||||
>
|
||||
<Route path="/dashboard" element={<ExecutiveDashboard />} />
|
||||
<Route path="/governance" element={<GovernancePage />} />
|
||||
<Route path="/projects" element={<ProjectsPage />} />
|
||||
<Route path="/projects/beneficiaries" element={<BeneficiariesPage />} />
|
||||
<Route path="/beneficiaries" element={<BeneficiariesPage />} />
|
||||
<Route path="/projects/change-management" element={<ChangeManagementPage />} />
|
||||
<Route path="/change-management" element={<ChangeManagementPage />} />
|
||||
<Route path="/projects/site-visits" element={<SiteVisitsPage />} />
|
||||
<Route path="/site-visits" element={<SiteVisitsPage />} />
|
||||
<Route path="/grants" element={<GrantsPage />} />
|
||||
<Route path="/monitoring" element={<MonitoringPage />} />
|
||||
<Route
|
||||
path="/dashboard"
|
||||
element={
|
||||
<ClaimProtectedRoute claim="dashboard">
|
||||
<ExecutiveDashboard />
|
||||
</ClaimProtectedRoute>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/governance"
|
||||
element={
|
||||
<ClaimProtectedRoute claim="governance">
|
||||
<GovernancePage />
|
||||
</ClaimProtectedRoute>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/projects"
|
||||
element={
|
||||
<ClaimProtectedRoute claim="projects_milestones">
|
||||
<ProjectsPage />
|
||||
</ClaimProtectedRoute>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/projects/beneficiaries"
|
||||
element={
|
||||
<ClaimProtectedRoute claim="beneficiaries">
|
||||
<BeneficiariesPage />
|
||||
</ClaimProtectedRoute>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/beneficiaries"
|
||||
element={
|
||||
<ClaimProtectedRoute claim="beneficiaries">
|
||||
<BeneficiariesPage />
|
||||
</ClaimProtectedRoute>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/projects/change-management"
|
||||
element={
|
||||
<ClaimProtectedRoute claim="change_management">
|
||||
<ChangeManagementPage />
|
||||
</ClaimProtectedRoute>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/change-management"
|
||||
element={
|
||||
<ClaimProtectedRoute claim="change_management">
|
||||
<ChangeManagementPage />
|
||||
</ClaimProtectedRoute>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/projects/site-visits"
|
||||
element={
|
||||
<ClaimProtectedRoute claim="site_visits">
|
||||
<SiteVisitsPage />
|
||||
</ClaimProtectedRoute>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/site-visits"
|
||||
element={
|
||||
<ClaimProtectedRoute claim="site_visits">
|
||||
<SiteVisitsPage />
|
||||
</ClaimProtectedRoute>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/grants"
|
||||
element={
|
||||
<ClaimProtectedRoute claim="grant_financials">
|
||||
<GrantsPage />
|
||||
</ClaimProtectedRoute>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/monitoring"
|
||||
element={
|
||||
<ClaimProtectedRoute claim="evidence_risks">
|
||||
<MonitoringPage />
|
||||
</ClaimProtectedRoute>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/tenants"
|
||||
element={
|
||||
@@ -78,7 +168,7 @@ export default function App() {
|
||||
</Route>
|
||||
|
||||
{/* Fallback Redirect */}
|
||||
<Route path="*" element={<Navigate to="/dashboard" replace />} />
|
||||
<Route path="*" element={<DefaultRouteRedirect />} />
|
||||
</Routes>
|
||||
</Suspense>
|
||||
</ToastProvider>
|
||||
@@ -87,3 +177,4 @@ export default function App() {
|
||||
</QueryClientProvider>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user