feat: add superadmin management
This commit is contained in:
20
App.tsx
20
App.tsx
@@ -8,10 +8,11 @@ import { MaterialsPage } from './pages/MaterialsPage';
|
||||
import { CoursePlayerModal } from './components/CoursePlayerModal';
|
||||
import { AuthProvider, useAuth } from './context/AuthContext';
|
||||
import { ToastProvider } from './context/ToastContext';
|
||||
import { Course } from './types';
|
||||
import { Course, UserRole } from './types';
|
||||
import { SuperAdmin } from './pages/SuperAdmin';
|
||||
|
||||
// Protected Route Component
|
||||
const ProtectedRoute: React.FC<{ children: React.ReactNode; allowedRole?: 'professor' | 'student' }> = ({ children, allowedRole }) => {
|
||||
const ProtectedRoute: React.FC<{ children: React.ReactNode; allowedRoles?: UserRole[] }> = ({ children, allowedRoles }) => {
|
||||
const { user, isLoading } = useAuth();
|
||||
|
||||
if (isLoading) return null;
|
||||
@@ -20,8 +21,8 @@ const ProtectedRoute: React.FC<{ children: React.ReactNode; allowedRole?: 'profe
|
||||
return <Navigate to="/" replace />;
|
||||
}
|
||||
|
||||
if (allowedRole && user.role !== allowedRole) {
|
||||
return <Navigate to={user.role === 'professor' ? '/gerenciar' : '/'} replace />;
|
||||
if (allowedRoles && !allowedRoles.includes(user.role)) {
|
||||
return <Navigate to={user.role === 'superadmin' ? '/admin' : user.role === 'professor' ? '/gerenciar' : '/'} replace />;
|
||||
}
|
||||
|
||||
return <>{children}</>;
|
||||
@@ -75,12 +76,21 @@ function AppContent() {
|
||||
<Route
|
||||
path="/gerenciar"
|
||||
element={
|
||||
<ProtectedRoute allowedRole="professor">
|
||||
<ProtectedRoute allowedRoles={['professor', 'superadmin']}>
|
||||
<ManageCourses />
|
||||
</ProtectedRoute>
|
||||
}
|
||||
/>
|
||||
|
||||
<Route
|
||||
path="/admin"
|
||||
element={
|
||||
<ProtectedRoute allowedRoles={['superadmin']}>
|
||||
<SuperAdmin />
|
||||
</ProtectedRoute>
|
||||
}
|
||||
/>
|
||||
|
||||
{/* Catch all redirect */}
|
||||
<Route path="*" element={<Navigate to="/" replace />} />
|
||||
</Routes>
|
||||
|
||||
Reference in New Issue
Block a user