feat: add superadmin management
All checks were successful
CI / Validate frontend and API (push) Successful in 1m59s
CI / Build and publish Docker images (push) Successful in 22s

This commit is contained in:
Cauê Faleiros
2026-09-01 09:54:45 -03:00
parent 2dfca33758
commit a5055238b9
21 changed files with 366 additions and 74 deletions

20
App.tsx
View File

@@ -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>