Skip to content

Fix #29: Admin-Routen per requireAdmin-Guard schützen - #225

Merged
Gree44 merged 1 commit into
stagingfrom
fix/29-admin-route-guard
Jul 25, 2026
Merged

Fix #29: Admin-Routen per requireAdmin-Guard schützen#225
Gree44 merged 1 commit into
stagingfrom
fix/29-admin-route-guard

Conversation

@Gree44

@Gree44 Gree44 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Closes #29

Problem

Die drei /admin/*-Routen in src/App.tsx (/admin/projects, /admin/templates, /admin/lecturers) wurden für alle Nicht-Studenten gerendert — also auch für Lecturer. Zwar blendet die Sidebar (Sidebar.tsx:70-79) den Admin-Nav für Nicht-Admins aus, aber der Route-Level-Guard fehlte: Ein Lecturer konnte die Admin-Seiten per direkter URL-Eingabe erreichen.

Change

Jede Admin-Route wird jetzt mit dem bereits existierenden (bislang ungenutzten) <ProtectedRoute requireAdmin> umschlossen. ProtectedRoute wird in App.tsx importiert.

Ein Nicht-Admin (Lecturer) läuft über den requireAdmin && !user.isAdmin-Zweig und wird sauber auf /dashboard umgeleitet — eine im Nicht-Studenten-Branch registrierte, existierende Route. Der /no-role-Zweig von ProtectedRoute greift nur für komplett rollenlose User und ist für diesen Fall irrelevant (er ist nicht als Route registriert, wird hier aber nie erreicht).

Hinweis

Das Backend erzwingt diese Berechtigung bereits (403 für Nicht-Admins auf Admin-Endpoints). Dies schließt die Lücke in der UI-Shell — reine Routing-Härtung, kein Daten-Leak und keine Layout-Änderung (Desktop/Mobile unverändert).

Verifikation

  • npm run build grün (der CSS-Minify-Warning ist vorbestehend und unabhängig)
  • Manuelle Prüfung: Lecturer (isAdmin=false) kann AdminProjectOverview / AdminTemplateApprovals / LecturerManagement nicht mehr rendern

…schützen

Die drei /admin/*-Routen (projects, templates, lecturers) wurden bisher
für ALLE Nicht-Studenten gerendert — auch Lecturer konnten sie per direkter
URL-Eingabe erreichen, obwohl die Sidebar den Admin-Nav für Nicht-Admins
bereits ausblendet.

Jede Admin-Route ist nun mit <ProtectedRoute requireAdmin> umschlossen
(die Komponente existierte bereits, war aber Dead Code). Ein Nicht-Admin
(Lecturer) wird über den requireAdmin-Zweig sauber auf /dashboard umgeleitet
— eine im Nicht-Studenten-Branch registrierte Route. Der /no-role-Zweig
greift nur für rollenlose User und ist hier nicht relevant.

Reine Routing-/Shell-Härtung, kein Layout-Change.
@RamonaKT
RamonaKT self-requested a review July 24, 2026 21:43
@Gree44
Gree44 merged commit cd8cc1d into staging Jul 25, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants