Skip to main content

Beheerderfunctionaliteit

12.1 Doel

Beheerderfunctionaliteit ondersteunt centraal beheer van OefenHub.

Het beheerderhoofdstuk beschrijft de functionele samenhang tussen:

  • beheerdercontext;
  • beheerder-frontpage;
  • Site Instellingen-hub;
  • accountbeheer;
  • rollenbeheer;
  • frontpagebeheer;
  • contentbeheer, vaste pagina’s en footer;
  • popupbeheer;
  • systeemberichttemplates;
  • featuretoggles;
  • systeemnotificaties;
  • technische systeeminstellingen;
  • centrale categorieën;
  • technische oefenmodules;
  • docentondersteuning;
  • meldingenbeheer;
  • beheerlogging en audit.

Beheerders hebben brede beheerrechten, maar beheerderrechten zijn geen vrije bypass op eindgebruikersfunctionaliteit.

Ook voor beheerders geldt:

  • de actieve beheercontext wordt server-side bepaald;
  • zichtbare menu-items zijn geen autorisatiebewijs;
  • iedere detail-, mutatie-, support- en exportactie controleert opnieuw de actuele rechten;
  • beheeracties blijven functioneel begrensd tot het betreffende beheerdomein;
  • mutaties worden auditbaar vastgelegd;
  • privacygevoelige inhoud wordt alleen getoond wanneer dat binnen het beheerdoel noodzakelijk en toegestaan is.

12.2 Domeinafbakening

Beheerderfunctionaliteit is geen enkel groot scherm en geen onbeperkte technische console.

Het domein bestaat uit meerdere beheergebieden met elk een eigen brondata, validatie, lifecycle en history.

BeheergebiedPrimair doelBronhoudende laag
BeheerdercontextVaststellen of de gebruiker beheerfuncties mag gebruiken.Rollen, sessiecontext en server-side autorisatie.
Beheerder-frontpageOriëntatie en samenvatting van beheerstatus.Afgeleide readmodels en contentblokken.
Site Instellingen-hubRoute-ingang naar onderliggende sitebeheerpagina’s.Codegedreven tegelset en beheerderautorisatie.
AccountbeheerAccounts, rollen, status, instellingen en lifecycle beheren.Users, Roles, UserRoles, UserSettings en accountlogs.
FrontpagebeheerTekstuele frontpagecontent beheren.ContentBlocks met DomainType = FrontPage.
Handige links & pagina’sURL-records, footercontent en vaste publieke pagina’s beheren.SiteLinks, footerrecords en ContentBlocks.
PopupbeheerBestaande popupinhoud corrigeren.Popupregister en PopupDetails.
SysteemberichttemplatesTemplate-inhoud voor toekomstige systeemcommunicatie beheren.SystemMessageTemplates.
FeaturesExpliciet togglebare functies sitebreed schakelen.SiteFeatureToggles.
SysteemnotificatiesDoelgroepgerichte overlays plannen en beheren.SiteNotifications.
Technische instellingenBestaande beheerbare configuratiesleutels wijzigen.SystemSettings.
Categorieën beherenCentrale categorie-identiteit, status en migratie beheren.Centrale categorieën, migraties en categoriehistorie.
Modules beherenTechnische oefenmodulemetadata en migraties beheren.ExerciseModules en modulehistorie.
DocentondersteuningEén docentcontext supportmatig inspecteren en corrigeren.Docentstructuur, niveauautorisaties, collaborators en history.
MeldingenbeheerMeldingen behandelen, oplossen, heropenen of doorzetten.Ticketdomein.
BeheerloggingBeheeracties raadplegen en reconstrueren.Domeinspecifieke history en beheerlogreadmodels.

Een beheeractie in één gebied mag niet impliciet brondata in een ander gebied wijzigen, tenzij die samengestelde actie expliciet als flow is uitgewerkt.

Voorbeelden:

  • accountbeheer kent geen oefeningen toe;
  • categoriebeheer wijzigt geen concrete moduleconfiguratiepayloads;
  • modulebeheer herschrijft geen historische runs;
  • frontpagebeheer wijzigt geen tellerdefinities;
  • popupbeheer bepaalt niet wanneer een popup in een flow verschijnt;
  • systeemberichtenbeheer wijzigt geen reeds verzonden systeemberichten;
  • docentondersteuning maakt geen nieuwe relatievorming buiten de vastgelegde supportflows om.

12.3 Bronpositie

Dit FO-hoofdstuk beschrijft de functionele samenhang en grenzen van beheerderfunctionaliteit.

BronlaagBetekenis
FOBeschrijft beheerdercontext, grenzen, samenhang en hoofdregels.
UsecasesBeschrijven per beheergebied de concrete flows, validatie, bevestiging en mutaties.
SchermdocumentatieBeschrijft de zichtbare schermen, tabs, velden, acties, lege toestanden en foutfeedback.
Database-informatieBeschrijft brondata, historytabellen, readmodels, lifecycle en persistente grenzen.
OntwerpbronnenBeschrijven business rules, autorisatiematrix, statusmodellen, command- en eventregister.
MockupsOndersteunen visuele interpretatie, maar zijn geen bron voor definitieve datawaarden of autorisatie.

Het FO dupliceert niet de volledige schermspecificatie en niet alle usecase-stappen.

Het FO legt vooral vast:

  • welk beheergebied bronhoudend is;
  • welke acties functioneel wel of niet horen bij beheerderfunctionaliteit;
  • welke autorisatie- en privacygrenzen gelden;
  • welke mutaties auditbaar zijn;
  • welke historische data niet herschreven mag worden;
  • hoe beheerderfunctionaliteit zich verhoudt tot andere FO-hoofdstukken.

12.4 Beheerdercontext

Toegang tot beheerderfunctionaliteit wordt uitsluitend server-side bepaald vanuit een actieve beheerdersrol.

Clientstate, routeparameters, browsergeschiedenis, bookmarks, zichtbare menu-items of verborgen knoppen mogen geen beheercontext afdwingen.

Voor beheerdercontext gelden minimaal de volgende regels:

OnderwerpRegel
Actieve beheerrolEen actieve roltoekenning met beheerderrol is vereist.
AccountstatusHet account moet actief en regulier toegankelijk zijn.
Niet-publieke rolDe beheerderrol is niet-publiek en mag niet via zelfregistratie ontstaan.
Server-side controleIedere beheerroute, detailweergave en mutatie controleert opnieuw server-side.
RoutebeveiligingDirecte URL’s naar beheerpagina’s zijn gelijk beveiligd aan navigatie via het menu.
ContextwisselingCombinatierollen veranderen de beheercontext niet in een vrij eindgebruikersrecht.
Zichtbare UIMenu’s, tegels en knoppen zijn presentatie en geen autorisatiebewijs.
FoutafhandelingBij ontbrekende beheercontext wordt geen beheerdata, technische sleutel of stacktrace getoond.

Een gebruiker met beheerderrol kan ook docent of ouder/voogd zijn.

In dat geval blijven de contexten functioneel gescheiden:

  • beheerdercontext is bedoeld voor beheer- en supporttaken;
  • docentcontext is bedoeld voor eigen docentfunctionaliteit;
  • ouder-/voogdcontext is bedoeld voor eigen gekoppelde kinderen;
  • beheerdercontext verleent geen live-meekijkrecht als beheerder;
  • beheerdercontext laat een beheerder niet namens een leerling oefenen.

12.5 Geen beheerder-bypass op eindgebruikersfunctionaliteit

Beheerderfunctionaliteit is breed, maar niet onbeperkt.

Een beheerder mag geen eindgebruikersflow uitvoeren alsof hij de eindgebruiker is, tenzij er een expliciete supportflow bestaat.

EindgebruikersdomeinBeheerdergrens
Leerling oefenenBeheerder start, hervat, beantwoordt of rondt geen leerlingrun namens een leerling af.
Live meekijkenBeheerder kan geen live-meekijksessie starten op actieve leerlingruns.
Ouder-/voogdinzageBeheerder krijgt geen ouder-/voogdcontext zonder actieve ouder-/voogdrelatie; beheerinzage verloopt via support- of auditcontext.
DocentresultatenBeheerder kan beheer- of supportinformatie raadplegen waar uitgewerkt, maar reguliere docentresultaatinzage blijft docentcontext.
PrivéberichtenBeheerder krijgt geen vrije impersonatie of generieke doorstuurfunctie.
RelatiebeheerBeheerdercorrrecties maken niet stilzwijgend nieuwe relaties buiten vastgelegde flows.
OefeningconfiguratieCentraal modulebeheer wijzigt geen concrete docentconfiguratie zonder expliciete migratie- of supportflow.
ProfielbeheerBeheerder wijzigt geen identity-providercredentials, wachtwoorden of externe sessies.

Beheerderondersteuning mag functioneel corrigeren waar dat is uitgewerkt, maar moet altijd auditbaar blijven.

12.6 Beheerdernavigatie

De beheerdernavigatie bevat minimaal:

  • Site Instellingen;
  • Content;
  • Accounts beheren.

Het menu-item Site Instellingen groepeert configuratieve sitebeheerfuncties, zoals:

  • Frontpage;
  • Popups beheren;
  • Systeemberichten;
  • Handige links & pagina’s;
  • Features;
  • Technische instellingen;
  • beheerlog waar dit als ingang is opgenomen.

Het menu-item Content groepeert inhouds- en supportgerichte beheerfuncties, zoals:

  • Categorieën beheren;
  • Modules beheren;
  • Docent ondersteuning.

Het menu-item Accounts beheren opent accountbeheer.

Navigatiestructuur is presentatie.

De onderliggende beheerpagina blijft zelf verantwoordelijk voor:

  • routeautorisatie;
  • objectautorisatie;
  • validatie;
  • bevestiging;
  • opslag;
  • history;
  • foutafhandeling.

12.7 Beheerder-frontpage

De beheerder-frontpage is een start- en oriëntatiepagina.

Zij bundelt beheersignalen en verwijst naar onderliggende beheergebieden, maar voert geen beheercommando’s rechtstreeks uit.

De beheerder-frontpage is read-only voor domeindata.

BlokBetekenis
IntroblokBeheerdergerichte uitleg en oriëntatie.
Vandaag extra aandachtCompacte signalen die beheer aandacht kunnen vragen.
ContentbeheerSamenvatting van centrale content- en oefenstructuur.
Accounts & rollenSamenvatting van actieve accounts, rollen en relevante status.
Recente beheerwijzigingenCompacte read-only lijst van recente beheeracties.

De beheerder-frontpage mag tonen:

  • aantal actieve modules;
  • aantal modules in onderhoud;
  • aantal actieve categorieën;
  • aantal uit gefaseerde categorieën;
  • aantal open of nieuwe meldingen;
  • aantal actieve systeemnotificaties;
  • aantal accounts per rol;
  • recente beheerwijzigingen.

De frontpage mag niet:

  • accounts wijzigen;
  • rollen toekennen;
  • modules migreren;
  • categorieën migreren;
  • meldingen oplossen;
  • content opslaan;
  • systeemnotificaties publiceren;
  • beheerdercontext afdwingen vanuit clientstate.

Iedere klik naar een onderliggende beheerroute voert opnieuw server-side beheerdercontrole uit.

12.8 Tellers en samenvattingswaarden op de beheerder-frontpage

Tellers en samenvattingswaarden zijn afgeleide readmodelwaarden.

Per teller moet functioneel vastliggen:

AspectVraag
DomeinobjectWelke objecten worden geteld?
StatusfilterWelke statuswaarden tellen mee?
ActiviteitsfilterTellen inactieve of soft-deleted records mee?
TijdvensterGeldt vandaag, recente periode of alle tijd?
ScopeGaat het om centrale objecten, accounts of supportcontexten?
Distinct-logicaWordt uniek geteld of tellen koppelingen mee?
TestdataTellen testmodules, TestDocentcontexten of testruns mee?
AutorisatieIs de teller alleen opgebouwd uit beheerdata die de beheerder mag zien?

Tellers zijn geen workflowstatus en geen opslagbron.

Wanneer een teller niet veilig kan worden opgebouwd, toont het systeem een veilige fout- of niet-beschikbaarafhandeling zonder technische details.

12.9 Site Instellingen-hub

Site Instellingen is een hubpagina en geen totaalformulier.

De hub toont codegedreven tegels naar onderliggende beheergebieden.

TegelDoelgebied
FrontpageTekstuele frontpagecontent per basiscontext.
Popups beherenBestaande popuprecords en beheerbare popupvelden.
SysteemberichtenBestaande systeemberichttemplates.
Handige links & pagina’sURL-records, footercontent en vaste publieke pagina’s.
FeaturesFeaturetoggles en systeemnotificaties.
Technische instellingenBestaande beheerbare systeeminstellingen.

De hub:

  • toont alleen route-ingangen;
  • voert geen beheercommand uit;
  • bevat geen editorstate;
  • slaat geen tegelvolgorde of persoonlijke beheerdervoorkeur op;
  • maakt geen nieuwe beheerdomeinen aan;
  • geeft geen mutatierecht door aan doelpagina’s.

Iedere doelpagina voert eigen autorisatie, validatie en history af.

12.10 Accountbeheer

Accountbeheer ondersteunt beheer van interne OefenHub-accounts.

Het blijft strikt gescheiden van de identity provider.

OefenHub-accountbeheer beheert:

  • interne applicatieaccounts;
  • profielgerelateerde accountstatus;
  • roltoekenningen;
  • publieke en niet-publieke rollen;
  • ondersteunde gebruikersinstellingen;
  • lifecycle-acties zoals tijdelijk uitschakelen, heractiveren en anonimiseren;
  • accountgeschiedenis en lifecyclelog;
  • informatieve online-/laatst-gezienstatus.

OefenHub-accountbeheer beheert niet:

  • wachtwoorden;
  • credentials;
  • tokens;
  • identity-provider-sessies;
  • primaire e-mailverificatieflows;
  • externe Keycloak- of identity-providerinterne statussen;
  • eindgebruikersrelaties buiten de vastgelegde lifecycle-opruimregels;
  • oefenresultaten als beheerbare inhoud.

12.11 Accountoverzicht

Het accountoverzicht is een server-side gefilterd beheerreadmodel.

Het overzicht ondersteunt minimaal:

  • zoeken;
  • filteren op rol;
  • filteren op accountstatus;
  • filteren op actief/inactief;
  • tonen van displaynaam;
  • tonen van e-mailadres waar toegestaan;
  • tonen van rollen;
  • tonen van laatst-gezieninformatie;
  • openen van accountdetail.

Zoeken en filteren zijn read-only.

Een zoekresultaat is geen toestemming om het account te wijzigen.

Het openen van accountdetail voert opnieuw server-side autorisatie uit.

12.12 Accountdetail

De accountdetailweergave toont één account binnen beheercontext.

Minimaal zichtbaar zijn:

  • basisaccountgegevens;
  • actieve status;
  • rollen;
  • rolhistorie waar relevant;
  • ondersteunde instellingen;
  • accountafhankelijkheden;
  • accountgeschiedenis;
  • lifecycle-acties die op dat moment toegestaan zijn.

Accountdetail mag niet tonen:

  • wachtwoorden;
  • tokens;
  • identity-provider secrets;
  • ruwe authenticatiesessies;
  • technische payloads die niet nodig zijn voor beheer;
  • oefenantwoorden of resultaatinhoud zonder expliciet supportdoel.

12.13 Rollen beheren

Beheerders kunnen toegestane rollen beheren binnen de rolregels van OefenHub.

RoltypeBeheerregel
Publieke rollenKunnen waar toegestaan worden toegekend of ingetrokken via accountbeheer.
Niet-publieke rollenAlleen via beheer, met server-side controle en auditbare reden.
LeerlingrolMag niet gecombineerd worden met Ouder/voogd, Docent, Beheerder of TestDocent.
Ouder/voogd, Docent, BeheerderMogen onderling gecombineerd worden volgens de contextregels.
TestDocentNiet-publieke rol voor gecontroleerde testzichtbaarheid, geen normale leerlingrol.

Voor niet-publieke rollen geldt:

  • zelfregistratie mag deze rollen nooit toekennen;
  • profielwijziging mag deze rollen nooit activeren;
  • toekenning vereist beheerderautorisatie;
  • intrekking vereist beheerderautorisatie;
  • waar vereist wordt een reden vastgelegd;
  • laatste actieve beheerder mag niet per ongeluk worden buitengesloten.

12.14 Account tijdelijk uitschakelen en heractiveren

Tijdelijk uitschakelen maakt een account niet regulier bruikbaar binnen OefenHub.

Het wijzigt geen identity-providercredentials.

Bij uitschakelen gelden minimaal:

  • Users.IsActive of de relevante interne accountstatus blokkeert reguliere toegang;
  • actieve sessies worden functioneel niet langer vertrouwd;
  • rollen en historie blijven bewaard;
  • relatie- en resultaatgeschiedenis wordt niet verwijderd;
  • de actie wordt auditbaar vastgelegd.

Heractiveren is alleen mogelijk wanneer het account niet geanonimiseerd of definitief verwijderd is volgens de accountlifecycle.

Bij heractiveren:

  • wordt server-side opnieuw gecontroleerd of de actor bevoegd is;
  • blijven historische rollen en relaties alleen actief wanneer de domeinregels dat toestaan;
  • ontstaat geen nieuwe identity-providercredential;
  • wordt de mutatie auditbaar vastgelegd.

12.15 Accountanonimisering door beheerder

Accountanonimisering is een definitieve interne OefenHub-lifecycleactie.

Het is niet hetzelfde als het verwijderen van het identity-provideraccount.

Bij anonimisering:

  • wordt actuele reguliere toegang beëindigd;
  • worden persoonsgegevens vervangen of gemaskeerd volgens de accountregels;
  • rollen worden beëindigd of niet langer autoriserend gemaakt;
  • actieve relaties worden administratief beëindigd;
  • open uitnodigingen worden niet langer accepteerbaar;
  • afhankelijke contexten worden volgens domeinregels opgeschoond;
  • historische reconstructie blijft mogelijk zonder actuele persoonsgegevens te tonen.

Anonimisering mag niet:

  • historische oefenruns hard verwijderen;
  • historische audit onbruikbaar maken;
  • berichten van andere deelnemers generiek verwijderen;
  • tickets of meldinghistorie onreconstrueerbaar maken;
  • identity-providercredentials rechtstreeks wijzigen.

Functionele gevolgen per domein:

DomeinBeheerregel bij anonimisering
AccountActuele persoonsgegevens worden gemaskeerd of vervangen. Het account wordt niet opnieuw regulier activeerbaar.
RollenActieve rollen worden beëindigd of niet langer autoriserend gemaakt. Niet-publieke rollen blijven historisch auditbaar.
RelatiesActieve relaties en open uitnodigingen van of naar het account worden beëindigd of niet langer accepteerbaar.
OefenrunsHistorische runs blijven functioneel beschikbaar binnen toegestane geschiedenis-, resultaat- en auditcontexten, maar zonder actuele persoonsgegevens.
Gedeelde oefeningenShared records en ontvangersruns blijven historisch verklaarbaar. Delen wordt niet opnieuw mogelijk gemaakt door anonimisering.
BerichtenAndere deelnemers behouden hun eigen threadzichtbaarheid volgens berichtregels. De geanonimiseerde deelnemer krijgt geen mailboxtoegang.
MeldingenTickets en ticketgeschiedenis blijven beheerbaar voor bevoegde beheerders, met geanonimiseerde actorweergave waar nodig.
AuditHistory- en beheerlogregels blijven reconstructief bruikbaar, maar tonen geen onnodige actuele persoonsgegevens.

Een beheerder mag retentie- of anonimiseringregels niet ad hoc per account aanpassen. Afwijkende bewaartermijnen, backupverwijdering, juridische grondslagen en technische cleanupmechanismen horen in beleid, TO of SRS, niet in een losse beheerhandeling.

12.16 Online-status bekijken

Online-status en laatst-gezieninformatie zijn informatief.

Zij zijn geen autorisatiebron.

Beheerders mogen online-/laatst-gezieninformatie raadplegen voor accountbeheer, maar krijgen hierdoor geen live-oefendata en geen live-meekijkrecht.

GegevenRegel
Laatst gezienAfgeleide account- of sessie-informatie.
Online-indicatieReadmodel of sessie-afgeleide waarde.
AutorisatieOnline-status verleent geen extra recht.
Live-oefeningBeheerder ziet hierdoor geen live vraag- of antwoorddata.
MutatieRaadplegen veroorzaakt geen account-, sessie- of rolmutatie.

12.17 Gebruikersinstellingen corrigeren

Een beheerder mag alleen expliciet ondersteunde gebruikersinstellingen corrigeren.

Voorbeelden kunnen zijn:

  • presentatievoorkeuren;
  • toegestane toegankelijkheidsinstellingen;
  • verborgen waarschuwingvoorkeuren wanneer support dat vereist;
  • andere in het instellingenmodel vrijgegeven velden.

Beheerdercorrecties aan instellingen mogen nooit:

  • rollen wijzigen;
  • relaties wijzigen;
  • zichtbare gegevenssets verruimen;
  • autorisaties wijzigen;
  • credentials of wachtwoorden aanpassen;
  • identity-providerdata aanpassen;
  • oefenresultaten wijzigen.

Wijzigingen worden server-side gevalideerd op:

  • bestaande instelling;
  • toegestaan datatype;
  • toegestane waarde;
  • rolcontext waar relevant;
  • auditvereisten;
  • reden waar vereist.

12.18 Accountgeschiedenis en lifecyclelog

Accountgeschiedenis is een read-only auditweergave.

Zij kan onder meer tonen:

  • accountaanmaak;
  • roltoekenningen;
  • rolintrekkingen;
  • tijdelijke uitschakeling;
  • heractivering;
  • instellingcorrecties;
  • anonimisering;
  • relevante lifecycle-opruimacties.

Historyrecords worden niet aangepast of verwijderd via normale beheeracties.

De beheerder ziet compacte reconstructie-informatie, geen identity-providercredentials.

12.19 Frontpagebeheer

Frontpagebeheer beheert tekstuele frontpagecontent binnen vooraf bepaalde basiscontexten.

Ondersteunde basiscontexten zijn:

ContextTypeFunctionele context
PublicNiet-ingelogde publieke frontpage.
NoRoleIngelogde gebruiker zonder actieve rolcontext.
StudentLeerlingfrontpage.
GuardianOuder-/voogdfrontpage.
TeacherDocentfrontpage.
AdminBeheerderfrontpage.

Beheerbare velden zijn tekstueel, zoals:

  • titel;
  • introductietekst;
  • label;
  • korte toelichting;
  • knoptekst waar de bestaande codecontext dit ondersteunt.

Niet beheerbaar via frontpagebeheer zijn:

  • layout;
  • blokvolgorde;
  • componenttype;
  • tellerdefinities;
  • autorisaties;
  • rolcontexten;
  • nieuwe technische blokkeys;
  • persistente ontwerpen per rolcombinatie;
  • systeemnotificaties;
  • popups;
  • footercontent.

Wijzigingen in frontpagebeheer volgen de generieke beheerhistorie. Minimaal moeten actor, tijdstip, gewijzigd veld en oude/nieuwe waarde herleidbaar zijn, voor zover het wijzigingstype deze waarden kent.

Gecombineerde frontpages worden runtime samengesteld uit basiscontexten.

Zij worden niet als aparte persistente frontpageconfiguraties beheerd.

De beheerpagina Handige links & pagina’s beheert tekstuele content en herbruikbare URL-records.

Binnen scope vallen:

  • URL-records;
  • URL-validatie;
  • footerinhoud;
  • footerlinktoewijzingen;
  • vaste publieke pagina’s;
  • wijzigingsgeschiedenis.

Vaste publieke pagina’s zijn minimaal:

  • Over OefenHub;
  • Privacybeleid;
  • Contact.

Contentbeheer is geen pagebuilder.

Beheer mag niet:

  • nieuwe pagina’s of routes via de GUI maken;
  • layout of formulierlogica wijzigen;
  • contactformulierverwerking aanpassen;
  • navigatie-autorisaties wijzigen;
  • systeemnotificaties nabootsen;
  • popups of systeemberichten vervangen door contentblokken.

URL-records worden gevalideerd voordat opslag slaagt.

Verwijderen van een URL-record is alleen toegestaan wanneer het record niet actief gebruikt wordt in footerlinktoewijzingen en gebeurt logisch met behoud van historie.

12.21 Popupbeheer

Popupbeheer is bedoeld voor bestaande popupdefinities.

De beheerder kan alleen beheerbare velden aanpassen die door de bestaande popupdefinitie zijn vrijgegeven.

Beheerbaar zijn minimaal:

  • titel;
  • tekst;
  • zichtbare knopteksten;
  • inputlabel wanneer de variant dit ondersteunt;
  • beheerbare toelichting wanneer functioneel ondersteund.

Read-only of codegedreven zijn minimaal:

  • PopupKey;
  • domeingebruik;
  • variant;
  • theme;
  • knopacties;
  • CustomRendererKey;
  • technische routering;
  • aantal invoervelden buiten de bestaande variant.

Popupbeheer mag niet:

  • nieuwe popupdefinities aanmaken;
  • popupdefinities verwijderen;
  • popups willekeurig uitschakelen;
  • popup-themes beheren;
  • runtimebeslissingen over popupweergave wijzigen;
  • popupteksten dupliceren in usecases.

Wijzigingen worden server-side gevalideerd en historisch vastgelegd.

12.22 Systeemberichttemplates

Systeemberichttemplates bepalen de inhoud van toekomstige systeemcommunicatie.

Zij zijn niet hetzelfde als concrete mailbox-systeemberichten.

Beheerbare velden zijn:

  • domein waar ondersteund;
  • type waar ondersteund;
  • onderwerp;
  • tekst;
  • zichtbare knoptekst wanneer de achterliggende code een actieknop ondersteunt.

Read-only of codegedreven zijn:

  • referentienaam;
  • technische actiecode;
  • entitytype-keuze;
  • routering;
  • placeholderdefinitie;
  • verplichting dat een systeemflow communicatie aanmaakt;
  • aangemaakte runtime-SystemMessages.

Templatewijzigingen gelden alleen voor toekomstige systeemcommunicatie.

Reeds aangemaakte systeemberichten worden niet met terugwerkende kracht aangepast.

12.23 Featuretoggles

Featuretoggles zijn sitebrede aan/uit-schakelaars voor functies die expliciet togglebaar zijn.

Minimaal functioneel relevante toggles zijn:

FeatureFunctionele betekenis
Registratie toegestaanBepaalt of registratie beschikbaar is.
Inloggen toegestaanBepaalt of reguliere login beschikbaar is.
Vriendschappen toegestaanBepaalt of vriendschap en gerelateerde acties beschikbaar zijn.
Privéberichten toegestaanBepaalt of nieuwe privéberichten beschikbaar zijn.
Live meekijken toegestaanBepaalt of live meekijken gestart kan worden.
Oefeningen delen toegestaanBepaalt of delen van afgeronde oefeningen beschikbaar is.
Testoefeningen beschikbaarBepaalt of testfunctionaliteit voor bevoegde test-/docentcontexten beschikbaar is.
Meldingen beschikbaarBepaalt of nieuwe meldingen ingediend kunnen worden.
Toegankelijkheid beschikbaarBepaalt of toegankelijkheidsinstellingen functioneel toegepast en aangeboden worden.

Featuretoggles wijzigen beschikbaarheid van functies, maar herschrijven geen bestaande domeindata.

Voorbeelden:

  • privéberichten uitzetten verwijdert geen bestaande threads;
  • meldingen uitzetten verwijdert geen bestaande tickets;
  • delen uitzetten verwijdert geen bestaande gedeelde oefeningen;
  • live meekijken uitzetten verwijdert geen auditrecords;
  • toegankelijkheid uitzetten verwijdert geen opgeslagen gebruikerswaarden.

12.24 Systeemnotificaties

Systeemnotificaties zijn beheerbare overlays die na frontpage- of contextload kunnen verschijnen.

Zij zijn geen:

  • mailbox-systeemberichten;
  • privéberichten;
  • popupregister-popups;
  • contentblokken;
  • ticketdiscussieberichten;
  • relatie-uitnodigingen.

Systeemnotificaties bevatten minimaal:

  • doelgroep (AudienceType);
  • notificatietype;
  • titel;
  • tekst;
  • startmoment in UTC;
  • optioneel eindmoment in UTC;
  • displayregel;
  • aanmaak- en wijzigingsinformatie.

Beheerderfunctionaliteit ondersteunt:

  • overzicht van actieve en geplande notificaties;
  • overzicht van recent verlopen notificaties;
  • overzicht van alle verlopen notificaties;
  • aanmaken;
  • wijzigen;
  • handmatig uitschakelen;
  • history raadplegen.

Handmatig uitschakelen vult het eindmoment met het actuele UTC-moment.

Een notificatie met OncePerBrowser gebruikt browsergebaseerde onderdrukking en geen server-side seen-tabel.

Tijdens een actieve leerling-oefenrun worden systeemnotificatie-overlays niet boven de oefening getoond.

12.25 Technische systeeminstellingen

Technische systeeminstellingen zijn bestaande configuratiesleutels die expliciet beheerbaar zijn vrijgegeven.

Nieuwe systeeminstellingen ontstaan via code en migratie, niet via de GUI.

Een systeeminstelling heeft minimaal:

  • sleutel;
  • functionele groep;
  • datatype;
  • invoervorm;
  • actuele waarde;
  • validatieregels;
  • wijzigingsmetadata.

Voor systeeminstellingen geldt:

OnderwerpRegel
Bestaande sleutelAlleen bestaande beheerbare sleutels kunnen worden gewijzigd.
DatatypeHet type bepaalt de toegestane invoer en validatie.
InvoervormDe UI volgt de codegedreven invoervorm per sleutel.
CacheNa wijziging wordt relevante configuratiecache ververst of ongeldig gemaakt.
AuditWijzigingen worden herleidbaar vastgelegd.
Geen vrije variabelenDe GUI is geen vrije key-value editor.

Booleaanse featurebeschikbaarheid hoort primair bij featuretoggles.

Systeeminstellingen zijn bedoeld voor waarden die niet simpelweg functie aan/uit betekenen.

12.26 Toegankelijkheidsfeature sitebreed

De toegankelijkheidsfeature heeft bijzondere impact omdat opgeslagen gebruikersinstellingen kunnen blijven bestaan terwijl toepassing sitebreed wordt uitgeschakeld.

Wanneer toegankelijkheid sitebreed wordt uitgeschakeld:

  • opgeslagen gebruikerswaarden blijven bewaard;
  • de functionaliteit wordt niet aangeboden of toegepast zolang de feature uit staat;
  • browserwaarden blijven geen bron van waarheid;
  • er worden geen persoonsgegevens in browserwaarden opgeslagen;
  • herinschakelen kan bestaande gebruikerswaarden weer laten gelden volgens de profielregels.

Deze actie wijzigt geen individuele profielwaarden.

12.27 Categorieën beheren

Categoriebeheer richt zich op centrale categorie-identiteit.

Centrale categorieën bevatten gedeelde onderwijsidentiteit zoals:

  • naam;
  • icoon;
  • kleur;
  • status;
  • aanmaak- en wijzigingsinformatie;
  • history.

Categoriebeheer is geen docentniveau-editor.

De beheerder beheert:

  • categorieoverzicht;
  • categoriebeheer-detail;
  • categoriegegevens;
  • categoriestatus;
  • migratie naar bestaande doelcategorie;
  • categoriegeschiedenis.

De beheerder beheert hier niet:

  • het aanmaken van oefeningen binnen een docentniveau;
  • concrete oefeningconfiguraties;
  • technische modules;
  • leerlingtoegang tot niveaus;
  • historische runresultaten;
  • gedeelde-oefening-snapshots;
  • resultaat-PDF’s.

12.28 Categoriestatus

Categoriestatus bepaalt of een centrale categorie regulier beschikbaar is voor nieuw gebruik.

Statuswijziging mag geen historische data onleesbaar maken.

Uitfaseren of verwijderen wordt geblokkeerd zolang de categorie actieve docentniveau- of oefenkoppelingen heeft wanneer de bronregels dat vereisen.

Een inactieve of uitgefaseerde categorie:

  • blijft historisch herleidbaar;
  • wordt niet regulier aangeboden voor nieuwe koppelingen;
  • herschrijft geen bestaande afgeronde runs;
  • mag geen leerlingtoegang blijven verruimen buiten actieve niveau-/oefencontext.

12.29 Categoriemigratie

Categoriemigratie is een expliciete beheeractie.

Zij migreert actieve koppelingen van een broncategorie naar een bestaande doelcategorie.

Voor categoriemigratie gelden minimaal:

OnderwerpRegel
BroncategorieDe broncategorie wordt expliciet gekozen.
DoelcategorieDe doelcategorie bestaat al en is geschikt als doel.
RedenEen reden is verplicht.
ImpactanalyseConflicten en gebruiksimpact worden vóór uitvoering bepaald.
DuplicaatpreventieDubbele actieve niveaucategorie- of oefenkoppelingen mogen niet ontstaan.
Historische dataExerciseRuns, gedeelde snapshots en resultaatcontexten worden niet herschreven.
AuditMigratie legt bron, doel, actor, moment, reden en uitkomst vast.
CommunicatieBetrokken docenten kunnen via systeemcommunicatie geïnformeerd worden.

Categoriemigratie is geen hernoemactie en geen hard delete.

De broncategorie blijft historisch herleidbaar, maar wordt na succesvolle migratie niet regulier kiesbaar waar dat volgens de migratieregels geldt.

12.30 Modules beheren

Modulebeheer richt zich op technische oefenmodules uit ExerciseModules.

Een module is de administratieve koppeling naar technische oefenlogica.

Modulebeheer ondersteunt minimaal:

  • moduleoverzicht;
  • modulebeheer-detail;
  • modulegegevens wijzigen;
  • actiefstatus wijzigen;
  • testzichtbaarheid wijzigen;
  • moduleconnectiviteit testen;
  • docentgerichte modulemigratie;
  • globale modulemigratie;
  • proefmigratie controleren;
  • modulegeschiedenis bekijken.

Modulebeheer is geen editor voor concrete docent-oefeningconfiguraties.

Concrete oefeningen, oefeningnamen, iconen en modulespecifieke configuratiepayloads blijven bronhoudend in docentflows of docentondersteuning.

12.31 Modulegegevens en actiefstatus

Beheerbare modulemetadata kan onder meer bestaan uit:

  • weergavenaam;
  • beschrijving;
  • beschikbaarheidsstatus;
  • testzichtbaarheid;
  • versie- of referentie-informatie waar beheerbaar;
  • wijzigingsmetadata.

Read-only of codegedreven blijven:

  • technische module-implementatie;
  • modulecontract;
  • modulecode;
  • configuratie-DTO’s;
  • antwoordcontrole;
  • runtime-strategy;
  • bestaande payloadinterpretatie.

Een module op inactief zetten wordt geblokkeerd wanneer actieve concrete oefeningen de module gebruiken, tenzij een expliciete migratie- of onderhoudsflow de impact afdekt.

12.32 Testzichtbaarheid

Testzichtbaarheid is bedoeld voor gecontroleerde toegang tot modules in testcontext.

OnderwerpRegel
TestDocentNiet-publieke rol die via beheer wordt toegekend.
TestzichtbaarheidModule kan zichtbaar zijn voor testgebruik zonder reguliere beschikbaarheid te wijzigen.
Geen leerlingtoegangTestzichtbaarheid maakt een module niet automatisch zichtbaar voor reguliere leerlingen.
Geen roltoekenningModulebeheer kent geen TestDocentrol toe; dat hoort bij accountbeheer.
Geen permanente leerlinggeschiedenisDocenttestruns worden niet als reguliere leerlinggeschiedenis bewaard.

12.33 Moduleconnectiviteitstest

Een moduleconnectiviteitstest is een server-side healthcheck op de technische modulekoppeling.

De test:

  • wijzigt geen modulemetadata;
  • wijzigt geen concrete oefeningen;
  • maakt geen leerlingrun aan;
  • maakt geen docentresultaat aan;
  • toont een beheerresultaat;
  • kan technische fouten veilig loggen.

De uitkomst is support- en beheerinformatie, geen oefenresultaat.

12.34 Modulemigratie

Modulemigratie is een expliciete beheeractie.

Zij verplaatst toekomstig gebruik van actieve concrete oefeningen van een bronmodule naar een doelmodule binnen een bepaalde scope.

Ondersteunde scopes zijn:

ScopeBetekenis
ProefmigratieEén concrete oefening gecontroleerd testen.
DocentgerichtActieve concrete oefeningen van één docentcontext migreren.
GlobaalAlle actieve concrete oefeningen die de bronmodule gebruiken migreren.

Voor modulemigratie gelden minimaal:

  • bronmodule en doelmodule zijn expliciet;
  • doelmodule is actief en geschikt;
  • reden is verplicht;
  • impact wordt vooraf bepaald;
  • configuratiecompatibiliteit wordt server-side gevalideerd;
  • migratie wordt transactioneel verwerkt;
  • history wordt vastgelegd;
  • betrokken docentcontexten blijven herleidbaar.

Modulemigratie herschrijft niet:

  • historische runs;
  • afgeronde resultaten;
  • PDF-contexten;
  • gedeelde-oefening-snapshots;
  • bestaande ontvangersruns;
  • oude payloads die historisch geïnterpreteerd moeten blijven.

12.35 Docentondersteuning

Docentondersteuning is supportgericht beheer rondom één geselecteerde docentcontext.

De beheerder gebruikt deze pagina om:

  • docentstructuur te inspecteren;
  • niveaus te bekijken;
  • categoriegebruik binnen docentcontext te bekijken;
  • concrete oefeningen te bekijken;
  • configuratiepayloads voor supportanalyse te openen;
  • leerlingtoegang supportmatig te corrigeren;
  • collaborators te beheren;
  • docent-docenttoegang in uitzonderingen te forceren;
  • eigenaarschap over te dragen;
  • docentcontextgeschiedenis te bekijken.

Docentondersteuning vervangt niet:

  • reguliere docentflows;
  • centraal categoriebeheer;
  • centraal modulebeheer;
  • accountbeheer;
  • relatiebeheer;
  • leerlingresultaatbeheer;
  • live meekijken;
  • oefeningen maken namens leerlingen.

12.36 Docentstructuur inspecteren

Docentstructuurinspectie toont de hiërarchie:

  • docent;
  • niveau;
  • categorie;
  • concrete oefening;
  • modulekoppeling;
  • relevante configuratie- of statusinformatie.

Deze inspectie is primair read-only.

Zij mag worden gebruikt voor supportanalyse, maar maakt geen vrije beheerstructuur waarbij de beheerder willekeurig alle domeinobjecten kan wijzigen.

12.37 Leerlingtoegang supportmatig corrigeren

Een beheerder kan binnen docentondersteuning leerlingtoegang tot een niveau supportmatig corrigeren wanneer de usecase dit toestaat.

Daarbij geldt:

  • de docentcontext is expliciet geselecteerd;
  • de leerling moet binnen geldige relatie- en toegangskaders vallen;
  • de actie maakt geen nieuwe docent-leerlingrelatie aan;
  • de actie kent geen ouder-/voogdrelatie toe;
  • historische runs blijven bestaan;
  • ingetrokken toegang verwijdert geen resultaten;
  • mutatie wordt auditbaar vastgelegd.

12.38 Collaborators supportmatig beheren

Een beheerder kan collaborators op niveau-laag supportmatig beheren wanneer de flow dit toestaat.

Daarbij geldt:

  • een collaborator is een docent met geldige docent-docentcontext of expliciet geforceerde supportcontext;
  • collaboratorrechten gelden alleen binnen het betreffende niveau;
  • collaboratorrechten geven geen leerling-, resultaat- of live-meekijktoegang;
  • ontkoppelen van een collaborator is een soft-deactivatie;
  • geschiedenis blijft herleidbaar;
  • systeemberichten aan betrokken docenten kunnen ontstaan volgens communicatiebeleid.

12.39 Docent-docenttoegang forceren

Docent-docenttoegang forceren is een uitzonderlijke supportflow.

Deze flow mag alleen worden gebruikt wanneer supportmatig noodzakelijk en auditbaar verantwoord.

Zij:

  • maakt of heractiveert een docent-docentcontext voor support;
  • vereist beheerderautorisatie;
  • vereist reden;
  • creëert geen leerlingtoegang;
  • creëert geen resultaatinzage;
  • creëert geen live-meekijkrecht;
  • wordt auditbaar vastgelegd.

12.40 Eigenaarschap overdragen als beheerder

Een beheerder kan niveau-eigenaarschap overdragen binnen de daarvoor uitgewerkte supportflow.

Voor overdracht gelden minimaal:

  • het niveau heeft precies één actuele eigenaar;
  • de nieuwe eigenaar is een geldige kandidaat;
  • de kandidaat is actief en docent;
  • waar vereist is de kandidaat actieve collaborator;
  • reden is verplicht;
  • overdracht wordt transactioneel verwerkt;
  • history wordt vastgelegd;
  • betrokkenen kunnen systeemcommunicatie ontvangen.

Eigendomsoverdracht wijzigt geen historische resultaten en maakt geen leerlingruns opnieuw aan.

12.41 Meldingenbeheer binnen beheerderfunctionaliteit

Meldingenbeheer is inhoudelijk uitgewerkt in het meldingenhoofdstuk.

Binnen beheerderfunctionaliteit geldt dat beheerders meldingen kunnen:

  • zoeken en filteren;
  • openen;
  • lezen;
  • aan zichzelf of andere beheerders koppelen;
  • intern bespreken;
  • extern reageren;
  • oplossen;
  • sluiten;
  • heropenen;
  • doorzetten naar docent;
  • technische snapshot en geschiedenis raadplegen.

Meldingenbeheer blijft gescheiden van:

  • privéberichtendomein;
  • generieke mailbox;
  • accountbeheer;
  • docentondersteuning, behalve bij de expliciete doorzetflow naar docent;
  • contentbeheer.

Een melding doorzetten naar docent kan een privébericht namens de melder aanmaken, maar dit blijft een expliciet ondersteunde ticketflow en geen algemene impersonatie- of doorstuurfunctie.

12.42 Beheerlogging

Alle betekenisvolle beheerhandelingen moeten auditbaar zijn.

Minimaal vast te leggen zijn:

  • actor;
  • rolcontext;
  • tijdstip in UTC;
  • domein;
  • actie;
  • objecttype;
  • objectreferentie;
  • oude waarde waar relevant;
  • nieuwe waarde waar relevant;
  • reden waar vereist;
  • technische correlatie waar nuttig en veilig.

Beheerlogging is niet één vrije teksttabel die alle history vervangt.

Veel domeinen hebben eigen historytabellen of logs.

Het beheerlog-overzicht kan een read-only aggregatie zijn over meerdere bronnen.

12.43 Beheerlog-overzicht

Het beheerlog-overzicht toont compacte beheerhistorie.

Het ondersteunt minimaal:

  • filteren op domein;
  • filteren op actor;
  • filteren op periode;
  • filteren op actietype;
  • detail openen;
  • masking van gevoelige waarden;
  • read-only raadpleging.

Het beheerlog-overzicht wijzigt geen historyrecords en geen beheerde objecten.

12.44 Beheerlog-detail

Een beheerlogdetail toont één beheeractie veilig en contextueel.

Het detail kan bevatten:

  • datum/tijd;
  • actor;
  • domein;
  • object;
  • actie;
  • oude waarde;
  • nieuwe waarde;
  • reden;
  • bronverwijzing naar het onderliggende historyrecord waar toegestaan.

Gevoelige waarden worden gemaskeerd of niet getoond wanneer volledige inhoud niet nodig of niet toegestaan is.

12.45 Audit per beheergebied

BeheergebiedAuditregel
AccountbeheerRol-, status-, instelling- en lifecyclewijzigingen worden vastgelegd.
FrontpagebeheerVeldwijzigingen aan contentblokken worden historisch vastgelegd.
Links en pagina’sURL-, footer- en paginawijzigingen worden auditbaar vastgelegd.
PopupbeheerPopupveldwijzigingen worden per veld herleidbaar gemaakt.
SysteemberichttemplatesTemplatewijzigingen worden voor toekomstige communicatie vastgelegd.
FeaturesTogglewijzigingen worden met oude/nieuwe waarde vastgelegd.
SysteemnotificatiesInhoud, doelgroep, planning en displayregelwijzigingen worden vastgelegd.
SysteeminstellingenInstellingwijzigingen en cacheverwerking worden herleidbaar gemaakt.
CategorieënGegevens-, status- en migratieacties worden vastgelegd.
ModulesMetadata-, status-, testzichtbaarheid- en migratieacties worden vastgelegd.
DocentondersteuningSupportcorrecties, collaboratoracties en eigendomsoverdracht worden vastgelegd.
MeldingenbeheerTicketassignments, discussie, sluitingen, heropeningen en doorzetten worden vastgelegd in ticketbronnen.

12.46 Systeemcommunicatie vanuit beheerderflows

Beheerderflows kunnen systeemcommunicatie veroorzaken.

Voorbeelden:

  • roltoekenning of rolintrekking waar communicatie gewenst is;
  • accountlifecycle waar gebruikers geïnformeerd moeten worden;
  • categorie- of modulemigratie naar betrokken docenten;
  • niveauautorisatiecorrecties;
  • collaboratorwijzigingen;
  • eigendomsoverdracht;
  • ticketupdates;
  • doorzetten naar docent.

Systeemcommunicatie blijft bronhoudend in het communicatie- en template-domein.

Beheerderflows maken geen vrije berichtteksten buiten de template- en domeinregels om, tenzij de onderliggende usecase vrije toelichting ondersteunt.

Het lezen van een systeembericht verwerkt de onderliggende beheeractie niet opnieuw.

12.47 Popupfeedback vanuit beheerderflows

Beheerderflows gebruiken popupfeedback voor bevestigingen, validatiefouten, blokkades en succesmeldingen waar dit is vastgelegd.

Usecases en FO dupliceren geen popupteksten.

Zij verwijzen naar popupkeys of beschrijven functionele feedback op hoofdlijnen.

Autorisatie- en validatiefouten mogen geen gevoelige gegevens lekken, zoals:

  • tokens;
  • stacktraces;
  • technische payloads;
  • interne identifiers zonder functionele noodzaak;
  • persoonsgegevens buiten toegestane context;
  • oefenantwoorden of resultaatinhoud buiten supportdoel.

12.48 Feature- en instellingseffecten op beheerderfunctionaliteit

Featuretoggles en systeeminstellingen kunnen bepalen of bepaalde beheeracties beschikbaar zijn.

Voorbeelden:

  • Registratie toegestaan beïnvloedt gebruikersregistratie maar verwijdert geen accounts.
  • Vriendschappen toegestaan beïnvloedt nieuwe vriendschapsacties maar verwijdert geen bestaande relaties.
  • Oefeningen delen toegestaan beïnvloedt nieuwe deelacties maar verwijdert geen shared records.
  • Live meekijken toegestaan beïnvloedt live-startacties maar verwijdert geen LiveViewAudit.
  • Meldingen beschikbaar beïnvloedt nieuwe meldingindiening maar verwijdert geen bestaande tickets.
  • Toegankelijkheid beschikbaar beïnvloedt toepassing van toegankelijkheidsinstellingen maar verwijdert geen opgeslagen waarden.

Beheer moet bij iedere toggle duidelijk maken welke bestaande data wel en niet geraakt wordt.

12.49 Privacygrenzen

Beheerderfunctionaliteit kan gevoelige gegevens raken.

Daarom gelden privacygrenzen per domein.

GegevenssoortBeheerregel
AccountgegevensAlleen tonen wat nodig is voor accountbeheer.
CredentialsNiet tonen of wijzigen binnen OefenHub.
OefenresultatenAlleen tonen binnen expliciet uitgewerkte resultaat-, support- of auditcontext.
Live voortgangNiet toegankelijk voor beheerder als live meekijken.
PrivéberichtenNiet generiek leesbaar via beheer, tenzij specifieke ticket- of auditflow dit toestaat.
TicketsBeheerders mogen tickets behandelen volgens meldingenregels.
Technische snapshotsAlleen zichtbaar voor beheerders binnen meldingen/supportcontext.
HistoryCompact tonen en maskeren waar nodig.

Beheerderfunctionaliteit mag geen onnodige persoonsgegevens tonen alleen omdat de gebruiker beheerder is.

Voor retentie en anonimisering geldt aanvullend dat beheerweergaven actuele persoonsgegevens niet uit historische records mogen reconstrueren wanneer het account functioneel geanonimiseerd is. Historische reconstructie is toegestaan binnen de beheercontext, maar gebeurt met geanonimiseerde actor- of gebruikerweergave waar persoonsgegevens niet langer nodig of toegestaan zijn.

12.50 Autorisatie- en veiligheidsregels

Voor beheerderfunctionaliteit gelden overkoepelend:

  • iedere beheerroute controleert server-side de actieve beheerdercontext;
  • iedere mutatie controleert object-, veld- en commandautorisatie;
  • directe URL’s geven geen extra toegang;
  • clientstate bepaalt nooit welk object gewijzigd wordt;
  • formulierwaarden worden server-side gevalideerd;
  • concurrency wordt behandeld waar records gelijktijdig kunnen wijzigen;
  • mutaties zijn waar nodig transactioneel;
  • fouten tonen geen technische details aan gewone gebruikers;
  • auditregels worden niet afhankelijk gemaakt van clientdata;
  • beheerderacties mogen historische reconstructie niet breken.

12.51 Concurrency en race conditions

Beheerderacties kunnen botsen met andere beheerderacties of runtimeflows.

Daarom gelden minimaal:

SituatieRegel
Account tegelijk gewijzigdOpslaan controleert actuele status en relevante versie/context.
Rol intussen ingetrokkenMutatie wordt opnieuw geautoriseerd op het moment van opslaan.
Categorie intussen gemigreerdMigratie of statuswijziging herberekent impact vóór uitvoering.
Module intussen inactiefModulemigratie of configuratieactie valideert actuele moduletoestand.
Ticket intussen geslotenTicketbeheeractie controleert actuele ticketstatus.
Content intussen gewijzigdContentopslaan controleert actuele waarde of versie waar nodig.
Systeemnotificatie intussen verlopenWijziging controleert planning en actuele einddatum.
Beheerdercontext vervallenActie wordt geblokkeerd en niet gedeeltelijk opgeslagen.

Bij conflicten moet de gebruiker veilige feedback krijgen en mag geen gedeeltelijke mutatie achterblijven.

12.52 Geen hard deletes als standaard

Beheerderfunctionaliteit gebruikt soft delete, deactiveren of historisch behoud als standaard wanneer data functioneel relevant kan blijven.

Hard delete is geen normale beheeractie voor:

  • accounts;
  • rollen;
  • relaties;
  • oefenruns;
  • gedeelde oefeningen;
  • tickets;
  • contenthistory;
  • categoriehistory;
  • modulehistory;
  • beheerlogs.

Wanneer technische opschoning later nodig is, hoort die in een apart technisch of retentieontwerp.

12.53 Lege toestanden

Lege toestanden zijn normaal wanneer een beheerder toegang heeft tot een beheerpagina maar er geen relevante data is.

Voorbeelden:

  • geen accounts binnen filter;
  • geen zoekresultaten;
  • geen beheerderslogregels binnen periode;
  • geen actieve systeemnotificaties;
  • geen geplande systeemnotificaties;
  • geen verlopen notificaties;
  • geen URL-records;
  • geen footerlinks in een context;
  • geen popuphistory;
  • geen templatehistory;
  • geen categorieën binnen filter;
  • geen modules binnen filter;
  • geen docenten binnen docentondersteuning;
  • geen supportrelevante geschiedenis;
  • geen meldingen binnen beheerfilter.

Een lege toestand mag uitleg geven en naar een veilige vervolgstap verwijzen.

Een lege toestand mag geen verborgen autorisatie- of foutdetails lekken.

12.54 Fouttoestanden

Fouttoestanden ontstaan wanneer beheerdata niet veilig kan worden geraadpleegd of gewijzigd.

Voorbeelden:

  • beheerdercontext ontbreekt;
  • account is niet toegankelijk;
  • account is intussen geanonimiseerd;
  • rolcombinatie is ongeldig;
  • laatste beheerder zou worden buitengesloten;
  • instellingstype klopt niet;
  • contentblokkey is onbekend;
  • popupkey bestaat niet;
  • template bevat onbekende placeholders;
  • URL is ongeldig of onveilig;
  • URL-record wordt nog gebruikt;
  • categorie kan niet worden uitgefaseerd;
  • categoriemigratie heeft conflicten;
  • module kan niet worden gedeactiveerd;
  • modulemigratie is incompatibel;
  • docentcontext bestaat niet meer;
  • leerlingtoegang is intussen gewijzigd;
  • ticketstatus is intussen gewijzigd;
  • history kan niet worden vastgelegd;
  • cacheverversing faalt;
  • technische verwerking faalt.

Bij fouttoestanden geldt:

  • geen gedeeltelijke mutatie zonder consistente rollback of herstelstatus;
  • geen stacktrace aan eindgebruikers;
  • geen tokens of secrets in fouttekst;
  • geen gevoelige payload in gewone feedback;
  • technische logging bevat voldoende correlatie voor beheeranalyse.

12.55 Relatie tot andere FO-hoofdstukken

HoofdstukRelatie
Rollen, context en autorisatieBepaalt actieve beheerdercontext, niet-publieke rollen en server-side autorisatie.
Applicatieschil, header, footer en navigatieBepaalt beheerdernavigatie, profielmenu, badges en footer rondom beheerpagina’s.
Frontpages en overzichtsschermenBeschrijft beheerder-frontpage als read-only oriëntatiescherm.
Account, profiel en voorkeurenBeschrijft profiel- en accountgrenzen buiten beheerderaccountbeheer.
RelatiebeheerBronhoudend voor relaties; beheerdercorrecties blijven supportgericht.
Oefencatalogus, niveaus, categorieën en oefeningenBeschrijft centrale categorieën, niveaus en oefeningen waarop beheerderflows aansluiten.
Leerling: oefenen, voortgang en resultatenBeschrijft run-lifecycle die beheer niet namens leerlingen uitvoert.
Gedeelde oefeningenBeschrijft shared records die beheerderacties niet stilzwijgend herschrijven.
DocentfunctionaliteitBronhoudend voor reguliere docentflows; docentondersteuning is supportgericht.
Ouder-/voogdfunctionaliteitBeschrijft read-only oudercontext; beheerdercontext vervangt die niet.
Berichten, communicatie en notificatiesBeschrijft systeemberichten, privéberichten, badges en systeemnotificaties.
Meldingen en ticketafhandelingBeschrijft ticketbeheerflows voor beheerders.
Live meekijkenBeschrijft dat beheerder geen live-meekijkviewer is.
Contentbeheer, vaste pagina’s en footerDetailhoofdstuk voor content, URL-records, vaste pagina’s en footer.
Popups, templates, features en systeemnotificatiesDetailhoofdstuk voor popupbeheer, templates, features en notificaties.
PDF-export en resultaatpresentatieBeschrijft historische resultaatpresentatie; beheer herschrijft exportcontext niet.
Oefenmodules en modulepayloadsBeschrijft modulecontract, payloads en modulemigratiegrenzen.
Functionele architectuurcontextPlaatst beheerfuncties in bredere functionele architectuur zonder technische implementatiedetails te dupliceren.

12.56 Gerelateerde bronverwijzingen

BronLink
Technisch Ontwerp — rolflowsRollenflows technisch
Technisch Ontwerp — domeinmodelDomeinmodel en datamodel-overzicht
Technisch Ontwerp — databaseontwerpDatabaseontwerp, migraties, seeddata en constraints
Technisch Ontwerp — beheer en operatieBeheerbeleid, monitoring, backup, restore en operatie
Usecases — beheerderBeheerder
Usecases — beheerder frontpage en contextBeheerder — frontpage en context
UC-BEH-FP-001 — Beheerder-frontpage bekijkenBeheerder-frontpage bekijken
UC-BEH-FP-002 — Beheercontext bepalenBeheercontext bepalen
UC-BEH-FP-003 — Beheersamenvattingen tonenBeheersamenvattingen tonen
UC-BEH-FP-004 — Recente beheerwijzigingen tonenRecente beheerwijzigingen tonen
UC-BEH-FP-005 — Gecombineerde beheerder-docent-ouder-frontpage tonenGecombineerde beheerder-docent-ouder-frontpage tonen
Usecases — Site Instellingen-hubSite Instellingen-hub
UC-BEH-SITE-001 — Site Instellingen-hub openenSite Instellingen-hub openen
UC-BEH-SITE-002 — Beheertegel kiezenBeheertegel kiezen
UC-BEH-SITE-003 — Toegang tot Site Instellingen controlerenToegang tot Site Instellingen controleren
Usecases — accountbeheerAccountbeheer
UC-BEH-ACC-001 — Accountoverzicht bekijkenAccountoverzicht bekijken
UC-BEH-ACC-002 — Accountdetail openenAccountdetail openen
UC-BEH-ACC-003 — Accountrollen beherenAccountrollen beheren
UC-BEH-ACC-004 — Niet-publieke rol toekennen of intrekkenNiet-publieke rol toekennen of intrekken
UC-BEH-ACC-005 — Account tijdelijk uitschakelenAccount tijdelijk uitschakelen
UC-BEH-ACC-006 — Account heractiverenAccount heractiveren
UC-BEH-ACC-007 — Account anonimiseren als beheerderAccount anonimiseren als beheerder
UC-BEH-ACC-008 — Account online-status bekijkenAccount online-status bekijken
UC-BEH-ACC-009 — Gebruikersinstelling als beheerder wijzigenGebruikersinstelling als beheerder wijzigen
UC-BEH-ACC-010 — Accountgeschiedenis en lifecyclelog bekijkenAccountgeschiedenis en lifecyclelog bekijken
Usecases — frontpagebeheerFrontpagebeheer
UC-BEH-FRONT-001 — Frontpagebeheer openenFrontpagebeheer openen
UC-BEH-FRONT-002 — Frontpagecontext selecterenFrontpagecontext selecteren
UC-BEH-FRONT-003 — Frontpage-contentblok bewerkenFrontpage-contentblok bewerken
UC-BEH-FRONT-004 — Frontpagewijziging opslaanFrontpagewijziging opslaan
UC-BEH-FRONT-005 — Frontpagegeschiedenis bekijkenFrontpagegeschiedenis bekijken
UC-BEH-FRONT-006 — Runtime-samenstelling van gecombineerde frontpage controlerenRuntime-samenstelling van gecombineerde frontpage controleren
Usecases — handige links en vaste pagina’sHandige links en vaste pagina’s
UC-BEH-LINKS-001 — Handige links en pagina’s openenHandige links en pagina’s openen
UC-BEH-LINKS-002 — URL-record aanmaken of wijzigenURL-record aanmaken of wijzigen
UC-BEH-LINKS-003 — URL-validatie uitvoerenURL-validatie uitvoeren
UC-BEH-LINKS-004 — URL-record verwijderenURL-record verwijderen
UC-BEH-LINKS-005 — Footertekst bewerkenFootertekst bewerken
UC-BEH-LINKS-006 — Footerlink-toewijzingen beherenFooterlink-toewijzingen beheren
UC-BEH-LINKS-007 — Vaste publieke pagina bewerkenVaste publieke pagina bewerken
UC-BEH-LINKS-008 — Wijzigingsgeschiedenis raadplegenWijzigingsgeschiedenis raadplegen
Usecases — popupbeheerPopupbeheer
UC-BEH-POP-001 — Popupoverzicht bekijkenPopupoverzicht bekijken
UC-BEH-POP-002 — Popupdetail openenPopupdetail openen
UC-BEH-POP-003 — Popupvelden wijzigenPopupvelden wijzigen
UC-BEH-POP-004 — Popupwijziging valideren en opslaanPopupwijziging valideren en opslaan
UC-BEH-POP-005 — Popupgeschiedenis bekijkenPopupgeschiedenis bekijken
UC-BEH-POP-006 — Custom-popup beperking toepassenCustom-popup beperking toepassen
Usecases — systeemberichtenbeheerSysteemberichtenbeheer
UC-BEH-SYSMSG-001 — Systeemberichttemplates overzicht bekijkenSysteemberichttemplates overzicht bekijken
UC-BEH-SYSMSG-002 — Systeemberichttemplate openenSysteemberichttemplate openen
UC-BEH-SYSMSG-003 — Systeemberichttemplate wijzigenSysteemberichttemplate wijzigen
UC-BEH-SYSMSG-004 — Templatevalidatie en placeholders controlerenTemplatevalidatie en placeholders controleren
UC-BEH-SYSMSG-005 — Templategeschiedenis bekijkenTemplategeschiedenis bekijken
Usecases — features en systeemnotificatiesFeatures en systeemnotificaties
UC-BEH-FEAT-001 — Features-overzicht bekijkenFeatures-overzicht bekijken
UC-BEH-FEAT-002 — Featuretoggle wijzigenFeaturetoggle wijzigen
UC-BEH-FEAT-003 — Systeemnotificaties-overzicht bekijkenSysteemnotificaties-overzicht bekijken
UC-BEH-FEAT-004 — Systeemnotificatie aanmakenSysteemnotificatie aanmaken
UC-BEH-FEAT-005 — Systeemnotificatie wijzigenSysteemnotificatie wijzigen
UC-BEH-FEAT-006 — Systeemnotificatie uitschakelenSysteemnotificatie uitschakelen
UC-BEH-FEAT-007 — Verlopen systeemnotificaties raadplegenVerlopen systeemnotificaties raadplegen
UC-BEH-FEAT-008 — Systeemnotificatie-weergaveregel toepassenSysteemnotificatie-weergaveregel toepassen
Usecases — systeeminstellingen en beheerloggingSysteeminstellingen en beheerlogging
UC-BEH-SET-001 — Systeeminstellingen-overzicht bekijkenSysteeminstellingen-overzicht bekijken
UC-BEH-SET-002 — Systeeminstelling wijzigenSysteeminstelling wijzigen
UC-BEH-SET-003 — Configuratiecache verversen na wijzigingConfiguratiecache verversen na wijziging
UC-BEH-SET-004 — Toegankelijkheidsfeature sitebreed schakelenToegankelijkheidsfeature sitebreed schakelen
UC-BEH-SET-005 — Instellingstype en invoervorm afdwingenInstellingstype en invoervorm afdwingen
UC-BEH-SET-006 — Beheerlog-overzicht raadplegenBeheerlog-overzicht raadplegen
UC-BEH-SET-007 — Beheerlog filteren en detail openenBeheerlog filteren en detail openen
Usecases — categorieën beherenCategorieën beheren
UC-BEH-CAT-001 — Categorieoverzicht bekijkenCategorieoverzicht bekijken
UC-BEH-CAT-002 — Categoriebeheer openenCategoriebeheer openen
UC-BEH-CAT-003 — Categoriegegevens wijzigenCategoriegegevens wijzigen
UC-BEH-CAT-004 — Categoriestatus wijzigenCategoriestatus wijzigen
UC-BEH-CAT-005 — Categoriemigratie voorbereidenCategoriemigratie voorbereiden
UC-BEH-CAT-006 — Categorie migrerenCategorie migreren
UC-BEH-CAT-007 — Categoriegeschiedenis bekijkenCategoriegeschiedenis bekijken
Usecases — modules beherenModules beheren
UC-BEH-MOD-001 — Moduleoverzicht bekijkenModuleoverzicht bekijken
UC-BEH-MOD-002 — Modulebeheer openenModulebeheer openen
UC-BEH-MOD-003 — Modulegegevens wijzigenModulegegevens wijzigen
UC-BEH-MOD-004 — Module-actiefstatus wijzigenModule-actiefstatus wijzigen
UC-BEH-MOD-005 — Testzichtbaarheid wijzigenTestzichtbaarheid wijzigen
UC-BEH-MOD-006 — Moduleconnectiviteit testenModuleconnectiviteit testen
UC-BEH-MOD-007 — Modulemigratie docentgericht uitvoerenModulemigratie docentgericht uitvoeren
UC-BEH-MOD-008 — Modulemigratie globaal uitvoerenModulemigratie globaal uitvoeren
UC-BEH-MOD-009 — Modulemigratie-proefuitvoering controlerenModulemigratie-proefuitvoering controleren
UC-BEH-MOD-010 — Modulegeschiedenis bekijkenModulegeschiedenis bekijken
Usecases — docentondersteuningDocentondersteuning
UC-BEH-DOCSUP-001 — Docentenoverzicht bekijkenDocentenoverzicht bekijken
UC-BEH-DOCSUP-002 — Docentondersteuning openenDocentondersteuning openen
UC-BEH-DOCSUP-003 — Docentstructuur inspecterenDocentstructuur inspecteren
UC-BEH-DOCSUP-004 — Niveau-detail binnen docentcontext bekijkenNiveau-detail binnen docentcontext bekijken
UC-BEH-DOCSUP-005 — Categorie-detail binnen docentcontext bekijkenCategorie-detail binnen docentcontext bekijken
UC-BEH-DOCSUP-006 — Oefening-detail binnen docentcontext bekijkenOefening-detail binnen docentcontext bekijken
UC-BEH-DOCSUP-007 — Concrete oefeningconfiguratie openenConcrete oefeningconfiguratie openen
UC-BEH-DOCSUP-008 — Leerling aan niveau toevoegenLeerling aan niveau toevoegen
UC-BEH-DOCSUP-009 — Leerling van niveau ontkoppelenLeerling van niveau ontkoppelen
UC-BEH-DOCSUP-010 — Collaborator aan niveau toevoegenCollaborator aan niveau toevoegen
UC-BEH-DOCSUP-011 — Collaborator van niveau ontkoppelenCollaborator van niveau ontkoppelen
UC-BEH-DOCSUP-012 — Docent-docenttoegang forcerenDocent-docenttoegang forceren
UC-BEH-DOCSUP-013 — Eigenaarschap overdragen als beheerderEigenaarschap overdragen als beheerder
UC-BEH-DOCSUP-014 — Docentcontextgeschiedenis bekijkenDocentcontextgeschiedenis bekijken
Schermdocumentatie — beheerder frontpageBeheerder frontpage
Schermdocumentatie — meldingen overzichtMeldingenoverzicht beheerder
Schermdocumentatie — accountsAccounts
Schermdocumentatie — site instellingenSite instellingen
Schermdocumentatie — frontpagebeheerSite instellingen — frontpage
Schermdocumentatie — popupsSite instellingen — popups
Schermdocumentatie — systeemberichtenSite instellingen — systeemberichten
Schermdocumentatie — handige links en pagina’sHandige links en pagina’s
Schermdocumentatie — featuresFeatures
Schermdocumentatie — categorieënCategorieën beheren
Schermdocumentatie — modulesModules beheren
Schermdocumentatie — docentondersteuningDocent ondersteuning
Database-informatie — identiteit en autorisatieIdentiteit en autorisatie
Database-informatie — docentstructuur en leerlingtoegangDocentstructuur en leerlingtoegang
Database-informatie — communicatie en notificatiesCommunicatie en notificaties
Database-informatie — configuratie en contentbeheerConfiguratie en contentbeheer
Database-informatie — ticket- en meldingsbeheerTicket- en meldingsbeheer
Database-informatie — oefenruns, delen en voortgangOefenruns, delen en voortgang
Database-informatie — audit, historie en technische uitgangspuntenAudit, historie en technische uitgangspunten
Ontwerpbron — autorisatiematrixAutorisatiematrix
Ontwerpbron — business rulesBusiness rules
Ontwerpbron — command-registerCommand-register
Ontwerpbron — event-registerEvent-register
Ontwerpbron — statusmodellenStatusmodellen
FO — rollen, context en autorisatieRollen, context en autorisatie
FO — frontpages en overzichtsschermenFrontpages en overzichtsschermen
FO — contentbeheer, vaste pagina’s en footerContentbeheer, vaste pagina’s en footer
FO — popups, templates, features en systeemnotificatiesPopups, templates, features en systeemnotificaties
FO — oefenmodules en modulepayloadsOefenmodules en modulepayloads