teach/public/js/permissions.js
Ramon 939c4ee68b v0.3.26-beta: server-API voor de gedeelde bibliotheek
- Nieuwe migratie db/010: shared_library-tabel (school_id NULL =
  systeembreed, anders per school; kind board/anchor; folder als pad)
- Routes: GET /shared/:kind (lijst, gefilterd op systeembreed + eigen
  school), GET /shared/:kind/:id (met data, voor kopiëren), POST (publiceren;
  scope global vereist systeemmanager, scope school staf met school),
  PATCH/DELETE per item en PATCH /shared/:kind/folder (prefix-rewrite,
  alleen als álle items onder het pad beheerd mogen worden)
- Beheerregel: systeemmanager altijd, eigenaar altijd, schoolbeheerder voor
  items van de eigen school; leerlingen hebben geen toegang
- Nieuwe permissies shared.global.manage / shared.school.manage (beide
  permissions.js); zes nieuwe servertests
2026-07-14 22:27:16 +02:00

33 lines
1.4 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'],
'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));
}