All checks were successful
dev - build & deploy naar test / build-and-deploy (push) Successful in 31s
- Migratie 014: site_content (sleutel/waarde, JSONB) voor site-inhoud die zonder release aanpasbaar moet zijn - GET /content (publiek): welkomstwoord, update-melding en widget-uitleg in één antwoord - het inlogscherm toont het welkomstwoord al vóór het inloggen - PUT /admin/content/:key (alleen systeemmanager, nieuwe permissie content.manage): upsert per toegestane sleutel (welcome/announcement/widgetInfo) met maat-limieten - 4 servertests: publiek lezen, upsert door super, 403/401 voor anderen, whitelist/vorm/omvang-validatie Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149FgUQvuwxKKEdvQGmNngF
36 lines
1.7 KiB
JavaScript
36 lines
1.7 KiB
JavaScript
// teach: centrale permissiematrix voor de 4 vaste rollen (super/admin/teacher/pupil).
|
|
// Gespiegeld in public/js/permissions.js (geen bundler in dit project, dus twee
|
|
// bestanden die dezelfde waarden hand-in-hand bijhouden). Dit is geen database-
|
|
// gestuurd/rechten-per-gebruiker-configureerbaar systeem, maar één benoemde bron
|
|
// i.p.v. dezelfde rol-arrays los verspreid over de routes.
|
|
export 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'],
|
|
'assignments.manage': ['super', 'admin', 'teacher'],
|
|
'progress.view': ['super', 'admin', 'teacher'],
|
|
'shared.global.manage': ['super'],
|
|
'content.manage': ['super'],
|
|
'shared.school.manage': ['super', 'admin', 'teacher'],
|
|
};
|
|
|
|
// Welke rol een account met welke rol mag aanmaken.
|
|
export const CREATABLE_ROLES = {
|
|
super: ['super', 'admin', 'teacher', 'pupil'],
|
|
admin: ['admin', 'teacher', 'pupil'],
|
|
teacher: ['pupil'],
|
|
};
|
|
|
|
// roles mag een losse rol-string zijn (bestaande aanroepen) of een array van alle
|
|
// rollen die een gebruiker heeft (hoofdrol + eventuele extra stafrollen).
|
|
export const can = (roles, action) => {
|
|
const list = Array.isArray(roles) ? roles : [roles];
|
|
return (PERMISSIONS[action] || []).some(r => list.includes(r));
|
|
};
|