teach/public/js/permissions.js
Ramon 2528e5b8f6
All checks were successful
dev - build & deploy naar test / build-and-deploy (push) Successful in 7s
v0.2.21-beta: meerdere functies per gebruiker (multi-rol voor staf) + zoekveld
- Nieuwe user_roles-koppeltabel (db/004_user_roles.sql): staf kan voortaan naast de hoofdrol extra functies krijgen (bv. groepsleiding + schoolbeheerder tegelijk); leerling blijft altijd exclusief
- can()/PERMISSIONS accepteren nu een array van rollen i.p.v. alleen een losse string (backward compatible), CREATABLE_ROLES-opzoeking wordt een unie over alle rollen van een gebruiker
- Rechten-checks in src/api.js gebruiken voortaan req.user.allRoles (hoofd- + extra rollen); identiteits-/scoping-logica (leerling-filters, aanmaken, groepsleiding-klas-scope) blijft bewust op de hoofdrol staan
- PATCH /admin/users/:id accepteert een nieuw veld extraRoles (super-only, alleen voor staf)
- Beheerpaneel: toggle-knoppen per stafgebruiker om extra rollen aan/uit te zetten; Instellingen toont voortaan alle rollen samengevoegd ("Schoolbeheerder + Groepsleiding")
- Zoekveld boven de gebruikerslijst (live filter op naam, client-side, behoudt focus tijdens typen) omdat die lijst in een grote school lang kan worden

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-13 22:41:40 +02:00

29 lines
1.2 KiB
JavaScript

/* teach - centrale permissiematrix voor de 4 vaste rollen (super/admin/teacher/pupil).
Gespiegeld in src/permissions.js (geen bundler in dit project, dus twee bestanden
die dezelfde waarden hand-in-hand bijhouden). */
const PERMISSIONS = {
'admin.access': ['super', 'admin', 'teacher'],
'password.own.change': ['super', 'admin', 'teacher'],
'schools.manage': ['super'],
'schools.resetPasswords': ['super', 'admin'],
'classes.view': ['super', 'admin', 'teacher'],
'classes.manage': ['super', 'admin'],
'users.manage': ['super', 'admin', 'teacher'],
'users.staffCredentials': ['super', 'admin'],
'users.genpw': ['super', 'admin', 'teacher'],
'users.role.change': ['super'],
};
const CREATABLE_ROLES = {
super: ['super', 'admin', 'teacher', 'pupil'],
admin: ['admin', 'teacher', 'pupil'],
teacher: ['pupil'],
};
/* can(action) gebruikt de ingelogde gebruiker (currentUser, uit core.js) - hoofdrol
plus eventuele extra stafrollen (currentUser.extraRoles) */
function can(action){
if(!currentUser) return false;
const roles = [currentUser.role, ...(currentUser.extraRoles||[])];
return (PERMISSIONS[action] || []).some(r => roles.includes(r));
}