Skip to main content

RBAC-permissieregister

Dit register is de technische en functionele naamgevingsbron voor de overgang van rolgebaseerde autorisatie naar permission-based RBAC binnen OefenHub.

De Permissions-tabel is de runtime bron van waarheid. Dit document beschrijft welke permission-codes bij de huidige ontwerpversie horen en hoe zij in code, tests, seeddata, routeguards, menucompositie en domeinservices gebruikt moeten worden.

Uitgangspunten

  • Rollen blijven bestaan, maar zijn geen autorisatiebeslissing meer.
  • Rollen zijn bundels van permissies via RolePermissions.
  • Een gebruiker kan meerdere rollen hebben; de effectieve rechten zijn de distinct union van alle actieve permissies uit alle actieve rollen.
  • De leerlingrol blijft exclusief en mag niet met andere rollen worden gecombineerd.
  • Docent, ouder/voogd en beheerder kunnen gecombineerd worden; de UI wordt samengesteld uit permissiegedreven blokken.
  • Een zichtbare knop, tegel, menu-item, frontpageblok of route is nooit autorisatiebewijs.
  • Iedere beveiligde ingang declareert de vereiste permission-code expliciet via metadata, guard of servicecontract.
  • De code bevat geen centrale C#-catalogus als tweede bron van waarheid. Startup-/testvalidatie controleert wel of alle in code gedeclareerde permission-codes in seed/database bestaan.
  • Objecttoegang blijft domeinspecifiek: een permissie opent de ingang; het domein bepaalt daarna of het concrete object binnen scope valt.
  • Beheer van rollen en permissies zelf is buiten scope van Feature 11-5 en wordt verder uitgewerkt in userstories/17_beheerderervaring/091-uc-admin-rbac-001-rollen-en-permissies-beheren-placeholder.md.

Naamgevingsconventie

Permissies zijn lowercase, puntgescheiden en volgen:

<resource>.<action>[.<scope>]

Regels:

  • Gebruik Engels voor technische codes.
  • Gebruik kebab-case binnen een segment wanneer één begrip meerdere woorden heeft.
  • Gebruik view voor scherm-, blok-, menu- en frontpagezichtbaarheid.
  • Gebruik read voor data raadplegen.
  • Gebruik create, update, delete, manage, export, start, complete, invite, accept, reject, invalidate voor betekenisvolle acties.
  • Gebruik scopes zoals own, assigned, children, collaborating, all, targeted, public, system alleen wanneer zij de betekenis van de permissie beperken.
  • Vermijd kapstokpermissies zoals student.manage of admin.full.
  • Maak geen permissies per puur visueel element, tenzij het element een zelfstandige security-impact heeft.

Baseline permissies per applicatieschil

PermissionBetekenisPrimaire rolbundel(s)Extra domein-/contextcontrole
frontpage.view.publicPublieke fallback/frontpage bekijken zonder reguliere rolcontext.Geen of systeemAlleen publieke content; geen accountdata.
frontpage.view.no-roleBeperkte frontpage voor geauthenticeerde gebruiker zonder bruikbare rol.Geen rol / systeemActief account, geen actieve publieke of niet-publieke rolcontext.
frontpage.view.studentLeerlingfrontpageblok tonen.StudentLeerlingrol exclusief; actieve niveaucontext waar vereist.
frontpage.view.teacherDocentfrontpageblok tonen.TeacherDocentdata blijft gescoped op eigenaar/collaborator/leerlingrelaties.
frontpage.view.guardianOuder-/voogdfrontpageblok tonen.GuardianAlleen samenvatting op basis van actieve GuardianStudent-relaties.
frontpage.view.administratorBeheerderfrontpageblok tonen.BeheerderBeheerderdata alleen via beheercontext; geen live-bypass.
menu.view.practiceLeerlingoefenmenu tonen.StudentAlleen zichtbaarheid; acties autoriseren opnieuw.
menu.view.shared-practiceGedeelde-oefeningenmenu tonen.StudentDelen/ontvangen blijft feature- en relatieafhankelijk.
menu.view.teacher-catalogDocentoefenaanbod/niveaus-menu tonen.TeacherObjectscope via niveau-eigenaarschap/collaboration.
menu.view.teacher-studentsDocentleerlingenmenu tonen.TeacherDocent-leerlingrelatie vereist voor data.
menu.view.teacher-liveDocent live-meekijkenmenu tonen.TeacherLive-start vereist actieve run en geldige leerling-/niveaucontext.
menu.view.guardian-childrenOuder-/voogdkinderenmenu tonen.GuardianKinderen alleen via actieve GuardianStudent-relaties.
menu.view.guardian-liveOuder-/voogd live-menu tonen.GuardianLive-start alleen voor actief gekoppeld kind.
menu.view.communicationBerichtenmenu tonen.Student, Teacher, Guardian, BeheerderMailboxdata alleen eigen threads/berichten.
menu.view.relationshipsRelatiemenu tonen.Student, Teacher, Guardian, BeheerderActies blijven rol-/relatietype-specifiek.
menu.view.supportMeldingen/supportmenu tonen.Student, Teacher, Guardian, BeheerderEigen tickets of beheercontext.
menu.view.administrator-dashboardBeheerdashboardmenu tonen.BeheerderGeen autorisatie voor role/permission management.
menu.view.administrator-site-settingsSite-instellingenmenu tonen.BeheerderAlleen beheersite-instellingen.
menu.view.administrator-accountsAccountbeheermenu tonen.BeheerderGeen beheer van permissies/rolpermissies in Feature 11-5.
profile-menu.view.profileProfielmenu-item tonen.Student, Teacher, Guardian, BeheerderAlleen eigen profielactie.
profile-menu.view.preferencesVoorkeurenmenu-item tonen.Student, Teacher, Guardian, BeheerderAlleen eigen voorkeuren.
profile-menu.view.accessibilityToegankelijkheidsmenu-item tonen.Student, Teacher, Guardian, BeheerderAlleen eigen toegankelijkheidsinstellingen.
profile-menu.view.student-historyLeerlinggeschiedenis in profielmenu tonen.StudentAlleen eigen geschiedenis.
profile-menu.view.guardian-childrenKinderen in profielmenu tonen.GuardianAlleen gekoppelde kinderen.
profile-menu.view.logoutUitloggen tonen.Student, Teacher, Guardian, BeheerderGeldige sessie of idempotente logout.

Account, profiel en publieke rolkeuze

PermissionBetekenisPrimaire rolbundel(s)Extra domein-/contextcontrole
profile.read.ownEigen profiel bekijken.Student, Teacher, Guardian, BeheerderSessie-user is eigenaar.
profile.update.ownEigen profielgegevens wijzigen.Student, Teacher, Guardian, BeheerderGeen e-mail/wachtwoord/providerdata; server-side validatie.
profile-avatar.update.ownEigen vooraf gedefinieerde profielfoto kiezen.Student, Teacher, Guardian, BeheerderAvatar bestaat en is actief.
preferences.update.ownEigen voorkeuren beheren.Student, Teacher, Guardian, BeheerderSleutel/type/rolscope toegestaan.
accessibility-settings.update.ownEigen toegankelijkheidsinstellingen beheren.Student, Teacher, Guardian, BeheerderFeatureflag en toegestane waarden.
account.delete.ownEigen accountverwijdering starten/bevestigen.Student, Teacher, Guardian, BeheerderEigen account, bevestiging en lifecycleflow.
account.logout.ownEigen sessie beëindigen.Student, Teacher, Guardian, BeheerderIdempotent; geen domeinmutatie.
public-roles.choose.ownEerste publieke rolkeuze voor no-role gebruiker.No-role / systeemAlleen publieke actieve rollen; Student exclusief.
public-roles.update.ownLatere eigen publieke roluitbreiding of wijziging.Student, Teacher, GuardianFeature 18; zelfde combinatieregels en cache-invalidatie.

Relaties, uitnodigingen en berichten

PermissionBetekenisPrimaire rolbundel(s)Extra domein-/contextcontrole
relationships.read.ownRelatieoverzicht bekijken.Student, Teacher, Guardian, BeheerderAlleen eigen relaties/pending uitnodigingen.
relationships.invite-friend.ownVriend uitnodigen.StudentFriendship-regels, e-mailvalidatie, duplicaatcontrole.
relationships.invite-guardian.ownOuder/voogd uitnodigen.StudentGuardianStudent-uitnodiging, targetrol Guardian.
relationships.invite-student.assignedDocent nodigt leerlingen uit.TeacherTeacher-student-uitnodiging vanuit docentcontext.
relationships.invitation.accept.ownEigen relatie-uitnodiging accepteren.Student, Teacher, GuardianOntvanger, status pending, doelrol compatibel.
relationships.invitation.reject.ownEigen relatie-uitnodiging afwijzen.Student, Teacher, GuardianOntvanger, status pending, bevestiging waar vereist.
relationships.disconnect.ownEigen relatie ontkoppelen of verzoek starten.Student, Teacher, GuardianBetrokken partij, relatietype en bevestiging.
messages.read.ownEigen mailbox/systeemberichten/threads bekijken.Student, Teacher, Guardian, BeheerderRecipient/participant en zichtbaarheid.
messages.create.relatedPrivébericht opstellen aan toegestane relatie/deelnemer.Student, Teacher, Guardian, BeheerderRelatie-/deelnemerscontext en feature actief.
messages.reply.ownEigen privéthread beantwoorden.Student, Teacher, Guardian, BeheerderParticipant, thread niet verwijderd, context nog geldig.
messages.delete.ownEigen privéthread uit eigen mailbox verwijderen.Student, Teacher, Guardian, BeheerderAlleen eigen participantzichtbaarheid.
system-messages.read.ownEigen systeembericht openen en leesstatus bijwerken.Student, Teacher, Guardian, BeheerderAlleen eigen recipient; vervolgactie autoriseert apart.

Leerlingervaring, oefenruns, resultaten en delen

PermissionBetekenisPrimaire rolbundel(s)Extra domein-/contextcontrole
practice-catalog.read.ownBeschikbare categorieën/oefeningen bekijken.StudentActieve niveaucontext en toegankelijke oefeningstatus.
practice-run.create.ownNieuwe oefenrun starten.StudentOefening/categorie/niveau actief en toegankelijk.
practice-run.resume.ownEigen niet-afgeronde run hervatten.StudentEigen run, niet afgerond, context nog geldig.
practice-run.answer.ownVraag in eigen actieve run beantwoorden.StudentEigen actieve run en vraagstatus.
practice-run.complete.ownEigen oefenrun afronden.StudentEigen run, workflowstatus geldig.
practice-history.read.ownEigen oefeninggeschiedenis bekijken.StudentEigen afgeronde runs of toegestane gedeelde context.
practice-results.read.ownEigen resultaatdetail bekijken.StudentEigen afgeronde run.
practice-results.export.ownEigen resultaat als PDF downloaden.StudentZelfde autorisatie als resultaatdetail; export hercontroleert.
shared-practice.share.friendAfgeronde oefening delen met vriend.StudentActieve vriendschap, deelbare run, feature actief.
shared-practice.read.receivedOntvangen gedeelde oefeningen bekijken.StudentOntvangen record zichtbaar en niet verwijderd/geblokkeerd.
shared-practice.start.receivedOntvangen gedeelde oefening starten.StudentOntvangen record geldig; oefening nog uitvoerbaar.
shared-practice.delete.receivedOntvangen gedeelde oefening uit lijst verwijderen.StudentAlleen eigen ontvangen record.

Docentervaring en onderwijsstructuur

PermissionBetekenisPrimaire rolbundel(s)Extra domein-/contextcontrole
teacher-frontpage-summary.read.ownDocentfrontpagesamenvattingen lezen.TeacherSamenvatting alleen binnen eigen docentcontext.
teacher-levels.read.ownEigen niveaus en open context bekijken.TeacherEigenaar/collaborator/open zichtbaarheid.
teacher-levels.create.ownNieuw niveau aanmaken.TeacherActor wordt eigenaar; module/categoryvalidatie volgt.
teacher-levels.update.ownEigen niveaukerngegevens wijzigen.TeacherEigenaar en statusregels.
teacher-levels.update.collaboratingNiveau bewerken als collaborator.TeacherActieve collaborator met bewerkrecht; geen leerlingtoegang door collaboration.
teacher-levels.transfer-ownership.ownEigenaarschap overdragen.TeacherHuidige eigenaar; doel is actieve collaborator; reden verplicht.
teacher-categories.read.ownCategorieën binnen bevoegd niveau bekijken.TeacherNiveaucontext bevoegd.
teacher-categories.link.ownBestaande centrale categorie aan niveau koppelen.TeacherNiveau-eigenaar/collaborator en centrale categorie geldig.
teacher-categories.create.central-requestNieuwe centrale categorie via docentflow aanvragen/aanmaken volgens ontwerpregel.TeacherServer-side centrale categorievalidatie.
teacher-exercises.create.ownOefening binnen bevoegd niveau aanmaken.TeacherNiveaucontext bevoegd; module actief.
teacher-exercises.update.ownEigen oefening configureren/wijzigen.TeacherEigenaar of bevoegd niveaubeheer.
teacher-exercises.update.collaboratingOefening wijzigen als collaborator.TeacherCollaborator binnen niveau; geen leerlingresultaten.
teacher-exercises.activate.ownOefening activeren/in onderhoud zetten.TeacherStatusovergang, module/categorie/niveau geldig.
teacher-exercises.test.ownOefening testen binnen docentcontext.TeacherTestrun niet als leerlingresultaat opslaan.
teacher-collaborators.manage.ownCollaborators op eigen niveau beheren.TeacherEigenaar van niveau; audit.
teacher-students.read.assignedEigen leerlingenoverzicht bekijken.TeacherActieve docent-leerlingrelaties.
teacher-students.invite.ownLeerlingen uitnodigen.TeacherDocentcontext, bulkregels, mail/systeemberichten.
teacher-student-authorizations.read.assignedNiveauautorisaties van eigen leerlingen bekijken.TeacherActieve docent-leerlingrelatie.
teacher-student-authorizations.manage.assignedNiveauautorisaties beheren.TeacherActieve docent-leerlingrelatie en bevoegd niveau.
student-results.read.assignedResultaten van eigen leerlingen lezen.TeacherAlleen door docent geautoriseerde niveaus/runs.
student-results.export.assignedResultaat-PDF binnen docentcontext downloaden.TeacherZelfde scope als resultaatdetail.
live-monitoring.read.assignedOnline status/livebeschikbaarheid eigen leerlingen lezen.TeacherActieve relatie en niveauautorisatie.
live-monitoring.start.assignedLive meekijken bij eigen leerling starten.TeacherActieve run, relatie, niveauautorisatie en livefeature.

Ouder-/voogdervaring

PermissionBetekenisPrimaire rolbundel(s)Extra domein-/contextcontrole
guardian-frontpage-summary.read.childrenOuder-/voogdfrontpagesamenvatting lezen.GuardianAlleen actieve GuardianStudent-relaties.
guardian-children.read.childrenKinderenoverzicht bekijken.GuardianAlleen actief gekoppelde kinderen.
guardian-child.read.childrenKindinformatie bekijken.GuardianActieve GuardianStudent-relatie met geselecteerd kind.
guardian-child.disconnect.childrenKind ontkoppelen als ouder/voogd.GuardianActieve relatie, bevestiging, audit.
student-results.read.childrenResultaten/geschiedenis van kind lezen.GuardianActieve GuardianStudent-relatie; run hoort bij kind.
student-results.export.childrenResultaat-PDF van kind downloaden.GuardianZelfde scope als resultaatdetail.
live-monitoring.read.childrenOnline status/livebeschikbaarheid kind lezen.GuardianActieve relatie en livefeature.
live-monitoring.start.childrenLive meekijken bij kind starten.GuardianActieve relatie, actieve run, read-only.

Beheerderervaring, support en systeeminstellingen

Deze permissies horen bij de bestaande applicatiebeheerderrol. Zij geven geen recht op het beheren van permissies of rol-permissiekoppelingen zelf.

PermissionBetekenisPrimaire rolbundel(s)Extra domein-/contextcontrole
administrator-frontpage-summary.read.allBeheersamenvattingen lezen.BeheerderAlleen afgeleide beheerreadmodels.
administrator-accounts.read.allAccountoverzicht en accountdetails lezen.BeheerderGeen credentials/providerdata.
administrator-accounts.update.allOndersteunde accountvelden/status wijzigen.BeheerderExpliciete beheeractie en audit.
administrator-accounts.deactivate.allAccount tijdelijk uitschakelen.BeheerderReden/audit; geen hard delete.
administrator-accounts.reactivate.allAccount heractiveren.BeheerderServer-side hercontrole rollen/permissies/context.
administrator-accounts.anonymize.allAccount anonimiseren als beheerder.BeheerderPrivacyflow, bevestiging, audit.
administrator-user-settings.update.allOndersteunde gebruikersinstelling corrigeren.BeheerderGeen auth/providerdata.
administrator-account-history.read.allAccountgeschiedenis/lifecyclelog bekijken.BeheerderBeheercontext.
administrator-categories.read.allCentrale categorieën lezen.BeheerderBeheercontext.
administrator-categories.update.allCategoriegegevens/status wijzigen.BeheerderStatus-/migratieregels en audit.
administrator-categories.migrate.allCategorie migreren.BeheerderBron/doel/impactcontrole en reden.
administrator-modules.read.allModuleoverzicht lezen.BeheerderBeheercontext.
administrator-modules.update.allModulegegevens/status/testzichtbaarheid wijzigen.BeheerderModulevalidatie en audit.
administrator-modules.migrate.allModulemigratie uitvoeren.BeheerderImpactcontrole, scope en reden.
administrator-teacher-support.read.allDocentstructuur inspecteren in supportcontext.BeheerderExpliciete docentselectie; geen vrije bypass.
administrator-teacher-support.update.allDocentondersteuningscorrecties uitvoeren.BeheerderSupportflow, domeincommand, audit.
administrator-frontpage-content.update.allFrontpagecontent beheren.BeheerderBestaand contentblok en layoutregels.
administrator-links.update.allHandige links, footer en vaste pagina's beheren.BeheerderURL/contentvalidatie, audit.
administrator-popups.update.allPopupdefinities beheren.BeheerderPopupkey, read-only technische velden, audit.
administrator-system-message-templates.update.allSysteemberichttemplates beheren.BeheerderPlaceholdervalidatie en historie.
administrator-featuretoggles.update.allFeaturetoggles wijzigen.BeheerderReden/audit en cacheverversing.
administrator-site-notifications.update.allSysteemnotificaties beheren.BeheerderDoelgroep, tijdvenster, displayregel.
administrator-system-settings.update.allSysteeminstellingen wijzigen.BeheerderType/invoervorm/audit en configcache.
administrator-auditlog.read.allBeheerlog raadplegen.BeheerderGeen wijziging auditdata.
administrator-mail-templates.update.allMailtemplates beheren.BeheerderPlaceholdervalidatie; WYSIWYG-placeholder story 090.
tickets.read.allBeheerdersoverzicht meldingen lezen.BeheerderBeheercontext.
tickets.assign.administratorBehandelaar koppelen/ontkoppelen.BeheerderReden en behandelcontext.
tickets.comment.externalExtern ticketbericht plaatsen als beheerder.BeheerderActieve behandelcontext.
tickets.comment.internalIntern ticketbericht plaatsen.BeheerderInterne zichtbaarheid.
tickets.resolve.allTicket oplossen/sluiten als beheerder.BeheerderNiet rechtstreeks vanuit New zonder behandelcontext.
tickets.reopen.allTicket heropenen als beheerder.BeheerderReden en statuscontrole.
tickets.forward.teacherMelding doorzetten naar docent.BeheerderGeldige docentselectie en behandelcontext.

Support voor eigen meldingen

PermissionBetekenisPrimaire rolbundel(s)Extra domein-/contextcontrole
tickets.create.ownEigen melding indienen.Student, Teacher, Guardian, BeheerderMeldingenfeature actief.
tickets.read.ownEigen meldingen en details bekijken.Student, Teacher, Guardian, BeheerderAlleen eigen tickets; interne beheerinfo verborgen.
tickets.comment.ownExtern reageren op eigen melding.Student, Teacher, Guardian, BeheerderTicket open/niet functioneel gesloten.
tickets.close.ownEigen melding sluiten.Student, Teacher, Guardian, BeheerderEigen ticket, reden verplicht.
tickets.resolve.accept.ownOplossing accepteren.Student, Teacher, Guardian, BeheerderEigen opgelost ticket, niet eerder geaccepteerd.
tickets.reopen.ownEigen melding binnen termijn heropenen.Student, Teacher, Guardian, BeheerderTermijn en toelichting.

Permissionbeheer en cachebeheer

Deze permissions zijn technisch noodzakelijk voor Feature 11-5 en voor toekomstig beheer, maar de beheerinterface voor role-permission management is buiten scope.

PermissionBetekenisPrimaire rolbundel(s)Extra domein-/contextcontrole
authorization-permissions.read.systemApplicatie/startup/test mag permissiedefinities lezen.SysteemAlleen technische services; geen UI.
authorization-permissions.seed.systemMigratie/seed mag permissies en RolePermissions idempotent synchroniseren.SysteemAlleen gecontroleerde seed/migratieflow.
authorization-cache.invalidate.ownEigen permissioncache legen na publieke rolwijziging.Student, Teacher, GuardianAlleen huidige gebruiker.
authorization-cache.invalidate.userPermissioncache van één gebruiker legen.Systeem / toekomstig AdminServicecontract; gebruikt bij UserRoles-mutatie.
authorization-cache.invalidate.rolePermissioncache van alle gebruikers in een rol legen.Systeem / toekomstig AdminServicecontract; gebruikt bij RolePermissions-mutatie.
authorization-roles.read.allRollen/permissiekoppelingen raadplegen.Toekomstig AdminPlaceholder 17-091; niet voor bestaande Beheerder.
authorization-roles.update.allRollen beheren.Toekomstig AdminPlaceholder 17-091.
authorization-role-permissions.update.allPermissies aan rollen koppelen/intrekken.Toekomstig AdminPlaceholder 17-091.
authorization-user-roles.update.allRollen aan gebruikers toekennen/intrekken.Toekomstig AdminPlaceholder 17-091; bestaande accountbeheerflow wordt herijkt.

Seedbundels initieel

De initiële seed koppelt permissions aan rollen als bundels. De exacte seed mag in code/migraties worden gesplitst per feature, maar de functionele intentie is:

RolbundelMinimale permissionfamilies
Studentfrontpage.view.student, menu.view.practice, profile-*, practice-*, shared-practice-*, eigen relationships-*, eigen messages-*, eigen tickets-*.
Teacherfrontpage.view.teacher, menu.view.teacher-*, profile-*, docentonderwijsstructuur, assigned student/result/live permissies, eigen relationships-*, eigen messages-*, eigen tickets-*.
Guardianfrontpage.view.guardian, menu.view.guardian-*, profile-*, children/result/live permissies, eigen relationships-*, eigen messages-*, eigen tickets-*.
Beheerderfrontpage.view.administrator, menu.view.administrator-*, applicatiebeheerder- en supportpermissies, eigen profiel/berichten/tickets. Geen authorization-role-permissions.update.all.
TestDocentAlleen testmodule-/testzichtbaarheidspermissies waar een module of feature dit expliciet vereist. Geen algemene docentpermissies tenzij apart gekoppeld.
Toekomstig AdminAlleen authorization-managementpermissies na uitwerking in Feature 17 story 091.

Validatie bij implementatie

Feature 11-5 moet afdwingen dat:

  • iedere RequiresPermission/RequirePermission/PermissionView-waarde in Permissions.Code bestaat;
  • iedere Permissions.Code uniek is;
  • iedere actieve RolePermissions-combinatie uniek is;
  • seeddata idempotent is;
  • permissies met gewijzigde omschrijving niet per ongeluk als nieuwe permission ontstaan;
  • tests falen wanneer een endpoint, page of component een onbekende permission declareert;
  • cache invalidatie plaatsvindt bij UserRoles-mutaties en bij latere RolePermissions-mutaties.