teach/public/js/permissions.js
Ramon aa4c5faaf9
All checks were successful
dev - build & deploy naar test / build-and-deploy (push) Successful in 31s
feat: server-kant CMS voor de systeemmanager (v0.3.83-beta)
- 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
2026-07-16 19:29:08 +02:00

34 lines
1.5 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'],
'assignments.manage': ['super', 'admin', 'teacher'],
'progress.view': ['super', 'admin', 'teacher'],
'shared.global.manage': ['super'],
'content.manage': ['super'],
'shared.school.manage': ['super', 'admin', 'teacher'],
};
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));
}