Autorisatiematrix — SchoolFlow
Formele vastlegging van wie wat mag zien en doen, aansluitend op de rollen uit docs/product-blauwdruk.md en zoals daadwerkelijk afgedwongen in het webdashboard (rolgebaseerde navigatie in components/DashboardNav.tsx, servergezijdige rolcontroles per pagina, en Row Level Security per school in de database).
| Rol | Overzicht | Ziek melden | Rooster & vervanging | Teamstatus | Verzuimmeldingen | Statistieken | Medewerkers | Gebruikers | Instellingen |
|---|---|---|---|---|---|---|---|---|---|
| Medewerker (employee) | ✓ | ✓ (eigen melding) | — | — | — | — | — | — | — |
| Meldkamer/operator | ✓ | — | — | — | — | — | — | — | — |
| Roostermaker (scheduler) | ✓ | — | ✓ | — | ✓ | — | — | — | — |
| Teamleider (teamlead) | ✓ | — | — | ✓ | ✓ | ✓ | — | — | — |
| HR/verzuimcoördinator | ✓ | — | — | — | ✓ | ✓ | ✓ | — | — |
| Vervanger (substitute) | ✓ | — | — | — | — | — | — | — | — |
| Schoolbeheerder (admin) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Handhaving (technisch, niet alleen procedureel)
- Database-niveau (Row Level Security): elke query is server-side beperkt tot de eigen school via
current_school_id()— een gebruiker kan nooit data van een andere school opvragen, ongeacht wat de applicatielaag toestaat (supabase/migrations/0002_auth_and_rls.sql). - Applicatie-niveau (rolcontrole per pagina): elke dashboardpagina controleert zelf de rol van de ingelogde gebruiker (bv.
app/dashboard/rooster/page.tsxweigert toegang aan iedereen behalvescheduler/admin), niet alleen door het navigatie-item te verbergen. - Accountbeheer: nieuwe accounts ontstaan uitsluitend via uitnodiging door een schoolbeheerder (
app/api/internal/gebruikers/uitnodigen/route.ts) — geen self-serve registratie, dus geen ongecontroleerde rol-toekenning.
Nog niet geïmplementeerd
- Granulaire rollen binnen een school (bijvoorbeeld HR beperkt tot één locatie bij een scholengroep) — bewust uitgesteld tot fase 3 (enterprise/multi-locatie), zie
docs/mvp-roadmap.md.
MFA voor HR en admin is inmiddels wél afgedwongen (
middleware.ts,/dashboard/beveiliging) — zie Beveiligingsbijlage.