4. Accounts
4.1 Schermafbeelding

4.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-BEH-03-01 |
| Schermnaam | Accounts — landingsview en accountbeheerstate |
| Doelgroep / onderdeel | Beheerder |
| Bronbestand | oefenhub_beheerder_03_accounts_V1_2.html |
| Mockupversie | V1.2 |
| Screenshotbestand | oefenhub_beheerder_03_accounts_v1_2.png |
| Processtap / context | Beheerder opent het accountsoverzicht vanuit de beheerdernavigatie om accounts te zoeken, te selecteren en vanuit één geselecteerd account door te gaan naar gericht accountbeheer. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende documentatie. |
| Opmerkingen | De screenshot toont de landingsweergave met overzicht, filters en detailpaneel. De HTML-bron bevat daarnaast de in-page beheerstate die na Open beheer zichtbaar wordt. Header, beheerdernavigatie, profielmenu, berichtenteller en footer vallen buiten deze schermuitwerking. Alle zichtbare namen, e-mailadressen, datums, rollen, aantallen en wijzigingsregels zijn dynamische voorbeeldwaarden. |
| Route / URL-patroon | Beheerderroute voor accountsoverzicht en accountbeheerstate, functioneel bijvoorbeeld /beheer/accounts. De technische route wordt door de applicatieroutering bepaald. |
| Autorisatie / vereiste rol-context | Actieve beheerdercontext. Alle zichtbare gegevens en acties moeten server-side worden afgedwongen; frontend-zichtbaarheid is geen beveiligingslaag. |
| Primair domeinobject / hoofdentiteit | Users als hoofdentiteit, met UserRoles, Roles, UserRelationships, RelationshipTypes, RelationshipEvents, accountgerelateerde historie en identity-providerstatus. |
| Gerelateerde schermen / navigatie | Beheerder-frontpage, Meldingen overzicht, generiek profiel, relatiebeheer, verdiepende accountbeheercontext en accountgerelateerde audit-/loggingweergaven. |
| Data-karakter | Beheer- en mutatievoorbereidende pagina: de landingsweergave is vooral uitlezend en selecterend; de beheerstate bevat gerichte mutaties voor basisgegevens, status, rollen en relaties. |
4.3 Functionele beschrijving
Het scherm Accounts is de beheerderwerkpagina voor het vinden, beoordelen en gericht beheren van OefenHub-accounts. De pagina combineert een overzichtsdeel met een detaildeel. Links zoekt en filtert de beheerder accounts; rechts verschijnt de samenvatting van het geselecteerde account. Vanuit die selectie kan de beheerder met Open beheer overschakelen naar een verdiepende beheerstate voor hetzelfde account.
De screenshot toont de overzichtsweergave. De HTML-bron bevat daarnaast de beheerstate die na Open beheer wordt getoond. Die beheerstate blijft functioneel onderdeel van deze HTML-mockup, omdat de bron daarin tabs bevat voor Intro / uitleg, Basis gegevens, Rollen, Relatiebeheer en Geschiedenis. De beheerstate vervangt in die toestand het overzicht en de filterstrook; met Terug naar overzicht keert de beheerder terug naar de landingsweergave.
4.3.1 Scope en afbakening
Binnen deze schermdocumentatie vallen:
- breadcrumb Home > Accounts;
- introblok Accounts beheren;
- zoek-, status- en sorteerfilters;
- gebruikersoverzicht met accountkaarten;
- detailpaneel van het geselecteerde account;
- recente wijzigingen van het geselecteerde account;
- de in-page beheerstate die via Open beheer wordt geopend;
- tabs en acties binnen die beheerstate voor basisgegevens, rollen, relaties en geschiedenis.
Buiten scope vallen:
- de algemene beheerderheader en navigatieknoppen;
- het berichtenicoon en eventuele badge;
- het profielmenu;
- de footer;
- technische Keycloak-schermen voor credentialbeheer;
- beheer van wachtwoorden, sessies of authenticatiecredentials binnen Keycloak zelf.
OefenHub beheert het applicatieprofiel, rollen, relaties, instellingen en domeincontext. Authenticatie, wachtwoorden, sessies en credential lifecycle blijven bij de onderliggende identity provider. Dit betekent dat deze pagina accountgegevens kan tonen of accountstatus kan beïnvloeden, maar niet zelf wachtwoordinhoud of authenticatiegeheimen beheert.
4.3.2 Interpretatie van mockupwaarden
Waarden zoals Noor van Dijk, Eva Jansen, Milan de Vries, noor@example.nl, 15 jan 2025, Vandaag · 08:41, 0 docentrelaties, 0 ouder-/voogdrelaties en de getoonde recente wijzigingen zijn voorbeelddata. Zij beschrijven vorm en gedrag, maar mogen niet als vaste productiegegevens worden gebruikt.
Ook filterwaarden, statuslabels en rolnamen zijn dynamisch uit het account-, rollen- en relatiedomein afgeleid. De beschikbare statusfilterwaarden en sorteeropties zijn functioneel begrensd, maar de lijstinhoud en geselecteerde accountgegevens zijn volledig afhankelijk van de actuele database en autorisatiecontext.
4.3.3 Overzichtsweergave
De overzichtsweergave bestaat uit een filterstrook en een hoofdkaart met twee kolommen.
De filterstrook ondersteunt:
- zoeken op naam of e-mailadres;
- filteren op accountstatus;
- sorteren op naam of laatste login.
De gebruikerslijst toont accountkaarten. Per kaart zijn zichtbaar:
- naam van het account;
- statusbadge, zoals Actief of Geblokkeerd;
- rolindicaties, zoals Docent, Beheerder of Leerling;
- laatste login of laatste bekende activiteit in compacte vorm.
Klikken op een accountkaart selecteert dat account en werkt het rechter detailpaneel bij. De geselecteerde kaart krijgt een duidelijke visuele selectie. De selectie bepaalt uitsluitend welke gegevens rechts getoond worden; mutaties vinden pas plaats in de beheerstate of via expliciete vervolgacties.
Het detailpaneel toont kerngegevens van het geselecteerde account:
- naam;
- e-mailadres;
- status;
- aanmaakdatum;
- laatste login;
- aantal docentrelaties;
- aantal ouder-/voogdrelaties;
- recente wijzigingen van de laatste 60 dagen.
De relatie-aantallen zijn samenvattende beheerindicatoren. Zij vervangen geen volledige relatiebeheerweergave. Voor detailinformatie over individuele relaties gebruikt de beheerder de verdiepende beheerstate of een daarvoor bedoelde relatiebeheercontext.
4.3.4 Zoek-, filter- en sorteerlogica
Zoeken werkt binnen de actuele statusfiltercontext. Een lege zoekterm betekent dat de lijst niet door tekstinvoer wordt beperkt. De zoekterm wordt server-side veilig verwerkt en mag niet als HTML worden geïnterpreteerd of in logging terechtkomen op een manier die onnodig persoonsgegevens verspreidt.
Het statusfilter ondersteunt in de mockup de waarden:
- Alle statussen;
- Actief;
- Geblokkeerd.
Het label Geblokkeerd is een gebruikersgericht beheerlabel. Technisch kan dit worden afgeleid uit de OefenHub-accountstatus, Users.IsActive en/of de accountstatus in de identity provider. Welke technische bron leidend is voor blokkeren of deactiveren moet in de service- en datalaag consequent worden toegepast; de UI mag niet zelf bepalen of een account werkelijk toegang heeft.
De sortering ondersteunt in de mockup:
- Naam (A-Z);
- Laatste login.
Sortering op naam gebruikt de functionele weergavenaam of samengestelde naam. Sortering op laatste login gebruikt de laatst bekende activiteit of loginwaarde, zoals Users.LastSeenAtUtc. Accounts zonder bekende laatste activiteit moeten voorspelbaar worden geplaatst volgens de gekozen sorteerregel.
4.3.5 Accountdetails en recente wijzigingen
De accountdetails zijn read-only in de landingsweergave. Zij geven de beheerder context voordat een gerichte beheeractie wordt geopend. Het detailpaneel mag geen volledige accountmutatie forceren vanuit de overzichtsweergave.
De sectie Recente wijzigingen (laatste 60 dagen) toont een compacte chronologische weergave van relevante accountwijzigingen. Deze lijst is bedoeld voor snelle oriëntatie. De volledige accountgeschiedenis is beschikbaar in de beheerstate onder Geschiedenis.
Recente wijzigingen kunnen voortkomen uit meerdere bronnen, zoals profielwijzigingen, roltoekenningen, rolintrekkingen, relatie-events en accountlifecycle-acties. De weergave toont per regel minimaal:
- datum en tijd;
- samenvatting van de wijziging;
- actor of systeemactie.
De lijst toont geen technische identifiers zoals GUID’s, role-id’s, relationship-id’s of identity-provider-id’s. Waar een actor is geanonimiseerd of niet meer actief is, moet de weergave nog steeds begrijpelijk blijven zonder persoonsgegevens onnodig te reconstrueren.
4.3.6 Beheerstate na Open beheer
De actie Open beheer opent de verdiepende beheerstate voor het geselecteerde account. De HTML-bron toont dat deze state de overzichts- en filterdelen verbergt en een tabstructuur toont. De beheerstate bevat:
- Intro / uitleg: uitlegt welke beheeronderdelen beschikbaar zijn en toont context over het account;
- Basis gegevens: ondersteunt het wijzigen van naam, e-mailadres en accountstatus;
- Rollen: toont actieve rollen en ondersteunt rol toevoegen of verwijderen binnen de geldende combinatieregels;
- Relatiebeheer: toont actieve relaties en ondersteunt het verwijderen of ontkoppelen waar dat is toegestaan;
- Geschiedenis: toont de volledige accountgeschiedenis zonder de 60-dagenbeperking van de landingsweergave.
De beheerstate gebruikt dezelfde geselecteerde gebruiker als context. Bij terugkeer naar het overzicht moet de selectie behouden blijven waar mogelijk, tenzij de accountstatus of filtercontext zodanig is gewijzigd dat het account niet meer binnen de actieve lijst valt.
4.3.7 Basisgegevens beheren
In de tab Basis gegevens kan een beheerder de beheerbare accountgegevens aanpassen. In de mockup zijn zichtbaar:
- naam;
- e-mailadres;
- status;
- laatste login als read-only waarde;
- Wijzigingen opslaan;
- Blokkeren / activeren.
E-mailadres is in OefenHub functioneel gekoppeld aan authenticatie en uitnodigingen. Omdat de identity provider bronhouder is voor authenticatie, moet een e-mailwijziging altijd consistent blijven met de identity-providerafhandeling. De UI mag geen situatie creëren waarin Users.Email, Keycloak-accountgegevens en uitnodigingslogica elkaar tegenspreken.
De actie Blokkeren / activeren mag niet alleen een visuele status wijzigen. Zij moet leiden tot een server-side accountstatusmutatie met audit/logging, zodat toegang en weergave consistent blijven.
4.3.8 Rollen beheren
De tab Rollen toont actieve rollen met activeringsdatum en acties. In de mockup zijn Beheerder en Docent zichtbaar en is er een rij Nieuwe rol toevoegen.
Rolbeheer moet de combinatieregels afdwingen:
- de rol Leerling mag niet gecombineerd worden met Ouder/voogd, Docent, Beheerder of TestDocent;
- Ouder/voogd, Docent en Beheerder mogen onderling gecombineerd voorkomen;
- niet-publieke rollen zoals Beheerder en TestDocent mogen alleen via beheer worden toegekend;
- actieve
UserId + RoleId-combinaties mogen niet dubbel actief bestaan.
Het verwijderen van een rol is een rolintrekking, geen hard delete van historische roltoekenning. Intrekking moet actor, tijdstip en rolcontext behouden. Wanneer rolwijzigingen gevolgen hebben voor automatische relaties, zoals een AdminAdmin-relatie bij beheerderrollen, moeten die relatie-events en eventuele systeemacties eveneens herleidbaar zijn.
4.3.9 Relatiebeheer binnen accountbeheer
De tab Relatiebeheer toont relaties van het geselecteerde account. De mockup bevat onder meer:
- AdminAdmin · Eva Jansen met toelichting dat deze automatisch actief blijft zolang beide gebruikers beheerder zijn;
- Docent-Docent · Mark Peters als actieve docentrelatie;
- acties zoals Ontkoppel of Verwijder.
Nieuwe relaties worden vanuit deze beheerstate niet aangemaakt. De beheerstate is bedoeld voor inzicht en correctie op bestaande relaties. Relatievorming blijft functioneel via uitnodiging, acceptatie of systeemregels verlopen.
Voor AdminAdmin geldt een bijzondere regel: zolang beide gebruikers een actieve beheerderrol hebben, is de relatie systeemgedreven en mag handmatige ontkoppeling niet actief zijn. De UI moet in dat geval de actie uitschakelen of blokkeren met een begrijpelijke toelichting. Wanneer één van beide gebruikers geen beheerder meer is, kan de relatie volgens de relationele lifecycle alsnog handmatig ontkoppelbaar worden.
Ontkoppelen of verwijderen van een relatie is geen hard delete. De relatie wordt gedeactiveerd met actor, tijdstip en reden waar die reden functioneel vereist is. Relatie-events blijven append-only beschikbaar.
4.3.10 Geschiedenis
De tab Geschiedenis toont de volledige accountgeschiedenis. Deze weergave is uitgebreider dan Recente wijzigingen (laatste 60 dagen) en bevat account-, rol- en relatiegebeurtenissen samen in chronologische volgorde.
De geschiedenis bevat compacte auditregels. Uitgebreide technische details of gevoelige logging horen niet vrij zichtbaar op deze pagina, tenzij zij functioneel noodzakelijk en geautoriseerd zijn. Accountlifecycle-acties zoals aanmaken, blokkeren, activeren, rolwijzigingen, relatie-events, e-mailwijzigingen en anonimisering moeten herleidbaar blijven volgens de account- en auditregels.
4.3.11 Leegstaten, foutstaten en disabled states
Wanneer de actieve zoek- en filterselectie geen accounts oplevert, toont de lijst een lege staat met uitleg dat er geen accounts aan de criteria voldoen. Het detailpaneel toont dan geen vorige selectie meer of toont een neutrale melding dat eerst een account geselecteerd moet worden.
Wanneer geen account is geselecteerd, is Open beheer niet beschikbaar. Wanneer de geselecteerde account niet langer bestaat binnen de actieve filtercontext, moet de selectie worden vernieuwd of duidelijk worden teruggezet.
Wanneer accountgegevens niet geladen kunnen worden, toont het detailpaneel een foutmelding zonder technische stacktrace. Een gedeeltelijke storing in recente wijzigingen mag de basisgegevens niet blokkeren; in dat geval toont alleen de wijzigingenlijst een passende fout- of niet-beschikbaarmelding.
Wanneer de beheerder een mutatie probeert die niet is toegestaan door rolcombinaties, relatiebeperkingen of server-side autorisatie, moet de server de mutatie weigeren en moet de UI een begrijpelijke foutmelding tonen. Een disabled knop in de frontend is ondersteunend, maar nooit voldoende beveiliging.
4.3.12 Responsief gedrag
Bij voldoende schermbreedte staan accountlijst en detailpaneel naast elkaar. Bij smallere schermen mogen zij onder elkaar worden geplaatst. De lijst blijft leidend: de beheerder moet eerst kunnen zoeken en selecteren voordat accountdetails worden getoond. De beheerstate met tabs mag responsief onder elkaar stapelen, zolang duidelijk blijft welke tab actief is en welke accountcontext wordt beheerd.
4.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-BEH-03-01-N01 | Section | Breadcrumb | Navigatiecontext binnen de beheerderpagina. | Home > Accounts | Header en hoofdbeheerdernavigatie vallen buiten scope. | AccountsBreadcrumb |
| SCH-BEH-03-01-S01 | Section | Introblok | Inleidend blok met schermtitel en toelichting op het accountsoverzicht. | Accounts beheren | Tekst kan beheerbaar zijn; structuur blijft codegedreven. | AccountsOverviewIntroSection |
| SCH-BEH-03-01-S02 | Section | Filterstrook | Groepeert zoeken, statusfilter en sortering. | — | Filtert de gebruikerslijst. | AccountFilterBarSection |
| SCH-BEH-03-01-F01 | Field | Filterstrook — zoeken | Tekstinvoer om accounts te zoeken op naam of e-mailadres. | Zoeken | Mockupwaarde Noor is voorbeelddata. | AccountSearchInput |
| SCH-BEH-03-01-F02 | Field / placeholder | Filterstrook — zoeken | Placeholdertekst in het zoekveld. | Zoek op naam of e-mailadres | Read-only labeltekst. | AccountSearchPlaceholder |
| SCH-BEH-03-01-DD01 | Dropdown | Filterstrook — status | Selectielijst voor filteren op accountstatus. | Alle statussen | Ondersteunt ten minste All, Active, Blocked. | AccountStatusFilterDropdown |
| SCH-BEH-03-01-DD02 | Dropdown | Filterstrook — sortering | Selectielijst voor sorteervolgorde van de accountlijst. | Naam (A-Z) | Ondersteunt ten minste naam en laatste login. | AccountSortOrderDropdown |
| SCH-BEH-03-01-S03 | Section | Gebruikersoverzicht | Linkerpaneel met accountkaarten die aan de actieve filters voldoen. | Gebruikersoverzicht | Scrollbare lijst bij meer resultaten. | AccountsOverviewSection |
| SCH-BEH-03-01-T01 | Table/Card list | Gebruikersoverzicht — accountkaarten | Lijst met accounts in kaartvorm. | <accountkaart> | Dynamisch op basis van filters. | AccountsCardList |
| SCH-BEH-03-01-A01 | Action | Gebruikersoverzicht — accountkaart | Selecteert een account en toont de details rechts. | — | De geselecteerde kaart krijgt visuele focus/selectie. | SelectAccountCardAction |
| SCH-BEH-03-01-F03 | Field | Accountkaart — naam | Naam van het account in de lijst. | <naam> | Dynamische weergavenaam. | AccountCardDisplayName |
| SCH-BEH-03-01-F04 | Field / badge | Accountkaart — status | Statusbadge van het account. | Actief / Geblokkeerd | Afgeleid statuslabel. | AccountCardStatusBadge |
| SCH-BEH-03-01-F05 | Field | Accountkaart — rollen | Compacte rolindicaties bij het account. | <rolnamen> | Meerdere rollen mogelijk, behalve verboden combinaties met leerling. | AccountCardRoleBadges |
| SCH-BEH-03-01-F06 | Field | Accountkaart — laatste login | Compacte laatste-loginweergave. | Laatste login: <waarde> | Afgeleid uit laatst bekende activiteit/login. | AccountCardLastLoginDisplay |
| SCH-BEH-03-01-S04 | Section | Accountdetails | Rechterpaneel met kerngegevens van het geselecteerde account. | Accountdetails | Read-only in landingsweergave. | AccountDetailsSection |
| SCH-BEH-03-01-F07 | Field | Accountdetails — naam | Naam van het geselecteerde account. | Naam | Read-only samenvatting. | SelectedAccountNameValue |
| SCH-BEH-03-01-F08 | Field | Accountdetails — e-mailadres | E-mailadres van het geselecteerde account. | E-mailadres | Read-only samenvatting in landingsweergave. | SelectedAccountEmailValue |
| SCH-BEH-03-01-F09 | Field | Accountdetails — status | Actuele accountstatus. | Status | Read-only samenvatting in landingsweergave. | SelectedAccountStatusValue |
| SCH-BEH-03-01-F10 | Field | Accountdetails — aanmaakdatum | Aanmaakdatum van het geselecteerde account. | Aanmaakdatum | Lokaal geformatteerde datum. | SelectedAccountCreatedAtValue |
| SCH-BEH-03-01-F11 | Field | Accountdetails — laatste login | Laatste bekende login of activiteit. | Laatste login | Kan ontbreken wanneer nog geen activiteit bekend is. | SelectedAccountLastLoginValue |
| SCH-BEH-03-01-F12 | Field | Accountdetails — aantal docenten | Aantal actieve docentrelaties voor het geselecteerde account. | Aantal docenten | Samenvattende teller. | SelectedAccountTeacherRelationCountValue |
| SCH-BEH-03-01-F13 | Field | Accountdetails — aantal ouders/voogden | Aantal actieve ouder-/voogdrelaties voor het geselecteerde account. | Aantal ouders/voogden | Samenvattende teller. | SelectedAccountGuardianRelationCountValue |
| SCH-BEH-03-01-B01 | Button | Accountdetails | Opent de verdiepende beheerstate van het geselecteerde account. | Open beheer | Alleen actief wanneer een account is geselecteerd. | OpenAccountManagementButton |
| SCH-BEH-03-01-S05 | Section | Recente wijzigingen | Compact historisch overzicht van recente accountwijzigingen. | Recente wijzigingen (laatste 60 dagen) | Beperkte oriëntatielijst; geen volledige geschiedenis. | RecentAccountChangesSection |
| SCH-BEH-03-01-T02 | Table/Card list | Recente wijzigingen — lijst | Chronologische lijst met recente wijzigingen. | <wijzigingsregel> | Toont datum/tijd, samenvatting en actor. | RecentAccountChangesList |
| SCH-BEH-03-01-S06 | Section | Accountbeheerstate | In-page beheercontext die na Open beheer zichtbaar wordt. | Accountbeheer · <naam> | Vervangt overzicht/filter in dezelfde HTML-state. | AccountManagementShell |
| SCH-BEH-03-01-B02 | Button | Accountbeheerstate — header | Keert terug naar de overzichtsweergave. | Terug naar overzicht | Behoudt selectie waar mogelijk. | ReturnToAccountsOverviewButton |
| SCH-BEH-03-01-TAB01 | Tab | Accountbeheerstate — tabs | Tab met uitleg en context. | Intro / uitleg | Standaard actief bij openen van beheerstate. | AccountManagementIntroTab |
| SCH-BEH-03-01-TAB02 | Tab | Accountbeheerstate — tabs | Tab voor bewerken van basisgegevens. | Basis gegevens | Bevat naam, e-mail en statusmutatie. | AccountManagementBasicDataTab |
| SCH-BEH-03-01-TAB03 | Tab | Accountbeheerstate — tabs | Tab voor rolbeheer. | Rollen | Bevat rolverwijdering en toevoegen van rol. | AccountManagementRolesTab |
| SCH-BEH-03-01-TAB04 | Tab | Accountbeheerstate — tabs | Tab voor relatiebeheer. | Relatiebeheer | Toont bestaande relaties; nieuwe relaties worden hier niet aangemaakt. | AccountManagementRelationsTab |
| SCH-BEH-03-01-TAB05 | Tab | Accountbeheerstate — tabs | Tab voor volledige accountgeschiedenis. | Geschiedenis | Zonder 60-dagenbeperking. | AccountManagementHistoryTab |
| SCH-BEH-03-01-S07 | Section | Intro / uitleg | Uitleg over beschikbare beheeronderdelen. | Wat kun je hier doen? | Bevat uitleg voor basisgegevens, rollen, relaties en geschiedenis. | AccountManagementIntroSection |
| SCH-BEH-03-01-S08 | Section | Intro / uitleg — context | Contextkaart van geselecteerd account. | Account in context | Toont status, laatste login en relatiesamenvatting. | AccountContextSummarySection |
| SCH-BEH-03-01-FORM01 | Form | Basis gegevens | Formulier voor accountbasisgegevens. | Bewerk basisgegevens | Mutaties worden pas verwerkt na opslaan. | AccountBasicDataForm |
| SCH-BEH-03-01-F14 | Field | Basis gegevens — naam | Bewerkbare naamweergave. | Naam | Server-side validatie verplicht. | AccountNameInput |
| SCH-BEH-03-01-F15 | Field | Basis gegevens — e-mailadres | Bewerkbaar e-mailadres. | E-mailadres | Moet consistent blijven met identity-providerstatus. | AccountEmailInput |
| SCH-BEH-03-01-DD03 | Dropdown | Basis gegevens — status | Keuze voor accountstatus. | Status | Bijvoorbeeld Actief / Geblokkeerd. | AccountStatusInput |
| SCH-BEH-03-01-F16 | Field | Basis gegevens — laatste login | Read-only laatste-loginwaarde. | Laatste login | Niet bewerkbaar. | AccountLastLoginReadonly |
| SCH-BEH-03-01-B03 | Button | Basis gegevens | Slaat gewijzigde basisgegevens op. | Wijzigingen opslaan | Vereist server-side validatie en audit/logging. | SaveAccountChangesButton |
| SCH-BEH-03-01-B04 | Button | Basis gegevens | Wisselt account tussen blokkeren en activeren. | Blokkeren / activeren | Zware accountstatusactie; server-side afhandeling vereist. | ToggleAccountBlockedStateButton |
| SCH-BEH-03-01-S09 | Section | Rollen | Lijst met actieve rollen en rolacties. | Rollen | Gebaseerd op UserRoles. | AccountRolesSection |
| SCH-BEH-03-01-T03 | Table/Card list | Rollen — lijst | Lijst met rollen van het account. | <rolregel> | Toont rolnaam en actief-sindsdatum. | AccountRolesList |
| SCH-BEH-03-01-A02 | Action | Rollen — rolregel | Trekt een actieve rol in. | Verwijderen | Geen hard delete; rolhistorie blijft bestaan. | RemoveAccountRoleAction |
| SCH-BEH-03-01-DD04 | Dropdown | Rollen — nieuwe rol | Selectie van toe te voegen rol. | Nieuwe rol toevoegen | Alleen toegestane rollen selecteerbaar. | NewRoleSelectionDropdown |
| SCH-BEH-03-01-B05 | Button | Rollen — nieuwe rol | Kent de geselecteerde rol toe aan het account. | Toevoegen | Respecteert rolcombinatieregels en niet-publieke rollen. | AddAccountRoleButton |
| SCH-BEH-03-01-S10 | Section | Relatiebeheer | Lijst met bestaande relaties van het account. | Relatiebeheer | Nieuwe relaties worden hier niet toegevoegd. | AccountRelationsSection |
| SCH-BEH-03-01-T04 | Table/Card list | Relatiebeheer — lijst | Lijst met actieve en relevante relaties. | <relatieregel> | Toont relatietype, wederpartij en status/toelichting. | AccountRelationsList |
| SCH-BEH-03-01-A03 | Action | Relatiebeheer — relatie | Deactiveert of ontkoppelt een bestaande relatie wanneer toegestaan. | Ontkoppel / Verwijder | Server-side regels bepalen beschikbaarheid. | DeactivateAccountRelationshipAction |
| SCH-BEH-03-01-S11 | Section | Geschiedenis | Volledige accountgeschiedenis. | Volledige accountgeschiedenis | Chronologische auditweergave. | FullAccountHistorySection |
| SCH-BEH-03-01-T05 | Table/Card list | Geschiedenis — lijst | Lijst met account-, rol- en relatie-events. | <geschiedenisregel> | Geen technische identifiers tonen. | FullAccountHistoryList |
| SCH-BEH-03-01-S12 | Section | Geschiedenis — samenvatting | Samenvattingskaart bij de volledige geschiedenis. | Samenvatting | Toont totalen, eerste registratie en laatste wijziging. | AccountHistorySummarySection |
4.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-BEH-03-01-N01 | Breadcrumb | Home > Accounts | AccountsBreadcrumb | Routeconfiguratie | Afgeleid uit beheerderroute | Navigation label | Nee | Geen technische routeparameters of account-id tonen. |
| SCH-BEH-03-01-S01 | Introblok | Accounts beheren | AccountsOverviewIntroSection | Codegedreven schermtekst of ContentBlocks indien beheerbaar gemaakt | Weergavetekst | String/rich text | Nee op deze view | Structuur blijft codegedreven; tekst veilig renderen. |
| SCH-BEH-03-01-F01 | Zoeken | Zoeken | AccountSearchInput | Gebruikersinput | Zoekcriterium voor accountreadmodel | String | Ja | Zoekt op naam en e-mailadres; invoer veilig verwerken en niet als HTML renderen. |
| SCH-BEH-03-01-DD01 | Statusfilter | Alle statussen | AccountStatusFilterDropdown | Vooraf gedefinieerde filterset + accountstatusafleiding | User input voor filter | Enum | Ja | Alleen toegestane waarden All, Active, Blocked; standaard All. |
| SCH-BEH-03-01-DD02 | Sortering | Naam (A-Z) | AccountSortOrderDropdown | Vooraf gedefinieerde sorteeropties | User input voor sortering | Enum | Ja | Alleen toegestane waarden zoals NameAsc en LastLogin; standaard NameAsc. |
| SCH-BEH-03-01-T01 | Gebruikersoverzicht | <accountkaart> | AccountsCardList | Users, UserRoles, Roles, Users.LastSeenAtUtc en accountstatus uit applicatie/identity-providercontext | Samengesteld accountoverzicht | Collection | Nee | Alleen accounts tonen waarvoor de beheerder server-side inzagerecht heeft. |
| SCH-BEH-03-01-F03 | Accountkaart — naam | <naam> | AccountCardDisplayName | Users.DisplayName, Users.FirstName, Users.MiddleName, Users.LastName | Databasewaarde of samengestelde weergavenaam | String | Nee | Naam veilig encoden; geanonimiseerde accounts volgens anonimiseerregel tonen. |
| SCH-BEH-03-01-F04 | Accountkaart — status | Actief / Geblokkeerd | AccountCardStatusBadge | Users.IsActive + accountstatus uit identity provider / applicatielaag | Afgeleid statuslabel | Enum/string | Nee | Statusweergave moet overeenkomen met daadwerkelijke toegangsstatus. |
| SCH-BEH-03-01-F05 | Accountkaart — rollen | <rolnamen> | AccountCardRoleBadges | UserRoles.IsActive, Roles.Name, Roles.Code | Actieve roltoekenningen | Collection/string | Nee | Alleen actieve rollen tonen; verboden combinaties mogen niet ontstaan. |
| SCH-BEH-03-01-F06 | Accountkaart — laatste login | Laatste login: <waarde> | AccountCardLastLoginDisplay | Users.LastSeenAtUtc | Lokaal geformatteerde datum/tijd of relatieve weergave | DateTime display/string | Nee | Lege waarde begrijpelijk weergeven wanneer onbekend. |
| SCH-BEH-03-01-F07 | Accountdetails — naam | Naam | SelectedAccountNameValue | Users.DisplayName, Users.FirstName, Users.MiddleName, Users.LastName | Databasewaarde of samengestelde weergavenaam | String | Nee | Read-only op landingsweergave. |
| SCH-BEH-03-01-F08 | Accountdetails — e-mailadres | E-mailadres | SelectedAccountEmailValue | Users.Email + identity-providerkoppeling via Users.ExternalId | Databasewaarde en identity-providercontext | E-mail/string | Nee op landingsweergave | E-mailadres uniek en case-insensitive behandelen. |
| SCH-BEH-03-01-F09 | Accountdetails — status | Status | SelectedAccountStatusValue | Users.IsActive + accountstatus uit identity provider / applicatielaag | Afgeleid statuslabel | Enum/string | Nee op landingsweergave | Mag niet uitsluitend client-side bepaald worden. |
| SCH-BEH-03-01-F10 | Accountdetails — aanmaakdatum | Aanmaakdatum | SelectedAccountCreatedAtValue | Users.CreatedAtUtc | Databasewaarde, lokaal geformatteerd | DateTime display | Nee | UTC-bronwaarde lokaal tonen. |
| SCH-BEH-03-01-F11 | Accountdetails — laatste login | Laatste login | SelectedAccountLastLoginValue | Users.LastSeenAtUtc | Databasewaarde, lokaal geformatteerd | DateTime display | Nee | Kan leeg zijn bij nog geen bekende activiteit. |
| SCH-BEH-03-01-F12 | Accountdetails — aantal docenten | Aantal docenten | SelectedAccountTeacherRelationCountValue | UserRelationships, RelationshipTypes.Code = TeacherStudent, IsActive = true | Berekende teller | Integer | Nee | Alleen actieve docentrelaties tellen; rolcontext respecteren. |
| SCH-BEH-03-01-F13 | Accountdetails — aantal ouders/voogden | Aantal ouders/voogden | SelectedAccountGuardianRelationCountValue | UserRelationships, RelationshipTypes.Code = GuardianStudent, IsActive = true | Berekende teller | Integer | Nee | Alleen actieve ouder-/voogdrelaties tellen; rolcontext respecteren. |
| SCH-BEH-03-01-B01 | Accountdetails | Open beheer | OpenAccountManagementButton | Geselecteerd account in UI-state | User action / navigatie binnen pagina | Action | Ja | Alleen actief wanneer een account geselecteerd is en beheerder rechten heeft. |
| SCH-BEH-03-01-T02 | Recente wijzigingen | Recente wijzigingen (laatste 60 dagen) | RecentAccountChangesList | Samengesteld readmodel over accountlifecycle, Users, UserRoles, RelationshipEvents en relevante accountlogs | Chronologische aggregatie van recente wijzigingen | Collection | Nee | Alleen laatste 60 dagen tonen; geen technische identifiers tonen. |
| SCH-BEH-03-01-S06 | Accountbeheerstate | Accountbeheer · <naam> | AccountManagementShell | Geselecteerd Users.Id in server-side autorisatiecontext | Samengestelde beheercontext | Composite | Ja | Alle mutaties opnieuw server-side autoriseren. |
| SCH-BEH-03-01-B02 | Accountbeheerstate | Terug naar overzicht | ReturnToAccountsOverviewButton | UI-state | User action | Action | Ja | Keert terug naar overzicht zonder onopgeslagen mutaties stilzwijgend te verwerken. |
| SCH-BEH-03-01-F14 | Basis gegevens — naam | Naam | AccountNameInput | Users.DisplayName en/of naamvelden | Beheerderinput | String | Ja | Verplichte naam-/displayvalidatie; veilige encoding. |
| SCH-BEH-03-01-F15 | Basis gegevens — e-mailadres | E-mailadres | AccountEmailInput | Users.Email + identity-providerkoppeling via ExternalId | Beheerderinput met identity-providerafstemming | E-mail/string | Ja | Uniek, geldig e-mailformaat en consistent met identity provider. |
| SCH-BEH-03-01-DD03 | Basis gegevens — status | Status | AccountStatusInput | Users.IsActive + accountstatus uit identity provider / applicatielaag | Beheerderinput | Enum | Ja | Blokkeren/activeren moet server-side en auditbaar plaatsvinden. |
| SCH-BEH-03-01-F16 | Basis gegevens — laatste login | Laatste login | AccountLastLoginReadonly | Users.LastSeenAtUtc | Databasewaarde, lokaal geformatteerd | DateTime display | Nee | Read-only; niet via formulier muteren. |
| SCH-BEH-03-01-B03 | Basis gegevens | Wijzigingen opslaan | SaveAccountChangesButton | Basisgegevensformulier | User action | Action | Ja | Valideert naam, e-mail en status; schrijft historie/logging. |
| SCH-BEH-03-01-B04 | Basis gegevens | Blokkeren / activeren | ToggleAccountBlockedStateButton | Accountstatus | User action | Action | Ja | Zware statusmutatie; mag eigen actieve beheerdersessie niet onveilig onderbreken zonder server-side guard. |
| SCH-BEH-03-01-T03 | Rollen | <rolregel> | AccountRolesList | UserRoles, Roles | Actieve roltoekenningen | Collection | Nee | Rollen tonen met actief-sindsdatum. |
| SCH-BEH-03-01-A02 | Rollen | Verwijderen | RemoveAccountRoleAction | UserRoles.IsActive, RevokedAtUtc, RevokedByUserId | Rolintrekking | Action | Ja | Geen hard delete; combinatieregels en gevolgen server-side controleren. |
| SCH-BEH-03-01-DD04 | Rollen | Nieuwe rol toevoegen | NewRoleSelectionDropdown | Roles.IsActive en beheerautorisatie | Selectie van rol | Enum/lookup | Ja | Niet-publieke rollen alleen zichtbaar/toe te kennen voor beheerder. |
| SCH-BEH-03-01-B05 | Rollen | Toevoegen | AddAccountRoleButton | UserRoles | Roltoekenning | Action | Ja | Actieve UserId+RoleId moet uniek zijn; leerling mag niet met andere rollen gecombineerd worden. |
| SCH-BEH-03-01-T04 | Relatiebeheer | <relatieregel> | AccountRelationsList | UserRelationships, RelationshipTypes, Users, Roles | Actieve en relevante relaties | Collection | Nee | Relaties per relatietype en rolcontext tonen. |
| SCH-BEH-03-01-A03 | Relatiebeheer | Ontkoppel / Verwijder | DeactivateAccountRelationshipAction | UserRelationships.IsActive, DeactivatedAtUtc, DeactivatedByUserId, RelationshipEvents | Relatiedeactivatie | Action | Ja | AdminAdmin niet handmatig ontkoppelen zolang beide gebruikers actieve beheerder zijn. |
| SCH-BEH-03-01-T05 | Geschiedenis | Volledige accountgeschiedenis | FullAccountHistoryList | Accountlogs, UserRoles, RelationshipEvents, relevante profiel-/accountmutaties | Chronologische auditweergave | Collection | Nee | Append-only brondata; geen technische identifiers tonen. |
| SCH-BEH-03-01-S12 | Geschiedenis — samenvatting | Samenvatting | AccountHistorySummarySection | Geschiedenisreadmodel over account-, rol- en relatiegebeurtenissen | Berekende samenvatting | Composite | Nee | Totalen, eerste registratie en laatste wijziging dynamisch afleiden. |
4.6 Schermtrace naar SRS en acceptatiecriteria
De onderstaande tabel legt per schermrequirement de koppeling naar het centrale schermrequirements-trace-register, SRS-requirements en acceptatiecriteria vast. De normatieve requirementtekst staat in de SRS; dit schermdocument beschrijft alleen de lokale schermcontext.
Deze tabel bevat alleen schermtraceability. De normatieve requirementtekst en acceptatiecriteria staan centraal in de SRS.
| Schermrequirement | Dekt | Schermcontext |
|---|---|---|
REQ-SCH-BEH-03-01-01 | SRS-ADM-005 AC-ADM-005 | De beheerder een accountsoverzicht tonen waarin accounts kunnen worden gezocht, gefilterd, geselecteerd en naast een detailpaneel beoordeeld |
REQ-SCH-BEH-03-01-02 | SRS-AUTH-001 SRS-ADM-005 AC-AUTH-001 AC-ADM-005 | Toegang tot het accountsoverzicht en de accountbeheerstate server-side beperken tot gebruikers met een actieve beheerdercontext |
REQ-SCH-BEH-03-01-03 | SRS-ADM-005 AC-ADM-005 | Het accountsoverzicht zoeken ondersteunen op naam en e-mailadres binnen de actieve statusfiltercontext |
REQ-SCH-BEH-03-01-04 | SRS-ADM-005 AC-ADM-005 | Het accountsoverzicht een statusfilter ondersteunen met minimaal Alle statussen, Actief en Geblokkeerd |
REQ-SCH-BEH-03-01-05 | SRS-ADM-005 AC-ADM-005 | Het accountsoverzicht sortering ondersteunen op minimaal Naam (A-Z) en Laatste login |
REQ-SCH-BEH-03-01-06 | SRS-ADM-005 AC-ADM-005 | Per accountkaart minimaal naam, statusbadge, actieve rolindicaties en laatste-loginweergave tonen |
REQ-SCH-BEH-03-01-07 | SRS-RDM-004 SRS-RDM-007 SRS-RDM-001 SRS-ADM-005 AC-RDM-004 AC-RDM-007 AC-RDM-001 AC-ADM-005 | Bij selectie van een account de bijbehorende kerngegevens tonen, waaronder minimaal naam, e-mailadres, status, aanmaakdatum, laatste login en samenvattende relatie-aantallen |
REQ-SCH-BEH-03-01-08 | SRS-RDM-004 SRS-RDM-007 SRS-RDM-002 SRS-RDM-001 SRS-AUTH-001 SRS-ADM-005 AC-RDM-004 AC-RDM-007 AC-RDM-002 AC-RDM-001 AC-AUTH-001 AC-ADM-005 | Actieve docentrelaties en actieve ouder-/voogdrelaties als afzonderlijke samenvattende tellers tonen, afgeleid uit het relatiedomein en de juiste rolcontext |
REQ-SCH-BEH-03-01-09 | SRS-ADM-005 AC-ADM-005 | De landingsweergave mag accountdetails alleen read-only tonen; mutaties via expliciete beheeracties of de beheerstate verlopen |
REQ-SCH-BEH-03-01-10 | SRS-ADM-005 AC-ADM-005 | De knop Open beheer alleen bruikbaar maken wanneer een account geselecteerd is en de beheerder voor dat account beheerrechten heeft |
REQ-SCH-BEH-03-01-11 | SRS-ADM-005 AC-ADM-005 | De actie Open beheer de verdiepende accountbeheerstate openen voor het geselecteerde account |
REQ-SCH-BEH-03-01-12 | SRS-ADM-005 AC-ADM-005 | De beheerstate tabs bieden voor Intro / uitleg, Basis gegevens, Rollen, Relatiebeheer en Geschiedenis |
REQ-SCH-BEH-03-01-13 | SRS-ADM-005 AC-ADM-005 | De beheerstate een actie Terug naar overzicht bieden waarmee de beheerder terugkeert naar de accountlijst zonder onopgeslagen mutaties stilzwijgend te verwerken |
REQ-SCH-BEH-03-01-14 | SRS-AUTH-001 SRS-NFR-AUD-001 AC-AUTH-001 AC-NFR-AUD-001 | In Basis gegevens het wijzigen van naam, e-mailadres en accountstatus ondersteunen binnen server-side validatie en audit/logging |
REQ-SCH-BEH-03-01-15 | SRS-ADM-001 AC-ADM-001 | E-mailwijzigingen consistent blijven met de identity-providerkoppeling en geen leiden tot tegenstrijdigheid tussen Users.Email, uitnodigingslogica en authenticatiecontext |
REQ-SCH-BEH-03-01-16 | SRS-ADM-001 AC-ADM-001 | De laatste-loginwaarde in de beheerstate read-only zijn en geen handmatig door een beheerder worden gewijzigd |
REQ-SCH-BEH-03-01-17 | SRS-AUTH-001 SRS-ADM-005 AC-AUTH-001 AC-ADM-005 | De actie Blokkeren / activeren een server-side accountstatusmutatie uitvoeren en geen alleen de zichtbare statusbadge wijzigen |
REQ-SCH-BEH-03-01-18 | SRS-ADM-005 AC-ADM-005 | Roltoekenningen tonen met rolnaam en actief-sindsdatum |
REQ-SCH-BEH-03-01-19 | SRS-ADM-005 AC-ADM-005 | Het toevoegen van rollen alleen toestaan voor actieve rollen die binnen de geldende beheer- en combinatieregels toegestaan zijn |
REQ-SCH-BEH-03-01-20 | SRS-ADM-005 AC-ADM-005 | Het systeem mag de rol Leerling niet combineren met Ouder/voogd, Docent, Beheerder of TestDocent binnen hetzelfde account |
REQ-SCH-BEH-03-01-21 | SRS-ADM-001 AC-ADM-001 | Toestaan dat Ouder/voogd, Docent en Beheerder onderling gecombineerd voorkomen wanneer de overige business rules dat toelaten |
REQ-SCH-BEH-03-01-22 | SRS-ADM-005 AC-ADM-005 | Niet-publieke rollen zoals Beheerder en TestDocent mogen alleen via beheer worden toegekend |
REQ-SCH-BEH-03-01-23 | SRS-NFR-AUD-001 SRS-ADM-005 AC-NFR-AUD-001 AC-ADM-005 | Rolintrekking historisch herleidbaar blijven en mag geen hard delete van de roltoekenningshistorie uitvoeren |
REQ-SCH-BEH-03-01-24 | SRS-ADM-005 AC-ADM-005 | Dubbele actieve roltoekenningen voor dezelfde gebruiker en rol voorkomen |
REQ-SCH-BEH-03-01-25 | SRS-AUTH-001 SRS-ADM-005 AC-AUTH-001 AC-ADM-005 | Bestaande relaties van het geselecteerde account tonen per relatietype en rolcontext |
REQ-SCH-BEH-03-01-26 | SRS-ADM-005 AC-ADM-005 | Nieuwe relaties geen vanuit de accountbeheerstate worden aangemaakt; relatievorming blijft via uitnodiging, acceptatie of systeemregels verlopen |
REQ-SCH-BEH-03-01-27 | SRS-AUTH-001 SRS-ADM-005 AC-AUTH-001 AC-ADM-005 | Ontkoppelen of verwijderen van een relatie vanuit accountbeheer server-side controleren of de relatie volgens het relatietype ontkoppelbaar is |
REQ-SCH-BEH-03-01-28 | SRS-ADM-005 AC-ADM-005 | Een AdminAdmin-relatie geen handmatig worden ontkoppeld zolang beide betrokken gebruikers een actieve beheerderrol hebben |
REQ-SCH-BEH-03-01-29 | SRS-NFR-AUD-001 SRS-ADM-001 AC-NFR-AUD-001 AC-ADM-001 | Relatieontkoppeling als deactivatie met auditinformatie worden verwerkt en mag de relatie niet hard verwijderen |
REQ-SCH-BEH-03-01-30 | SRS-ADM-005 AC-ADM-005 | In Recente wijzigingen een chronologische lijst tonen van relevante accountwijzigingen over de laatste 60 dagen |
REQ-SCH-BEH-03-01-31 | SRS-ADM-005 AC-ADM-005 | In Geschiedenis de volledige accountgeschiedenis tonen over account-, rol- en relatiegebeurtenissen |
REQ-SCH-BEH-03-01-32 | SRS-NFR-AUD-001 SRS-ADM-001 AC-NFR-AUD-001 AC-ADM-001 | Geschiedenisregels minimaal datum/tijd, wijzigingssamenvatting en actor of systeemactie tonen |
REQ-SCH-BEH-03-01-33 | SRS-AUTH-004 SRS-ADM-005 AC-AUTH-004 AC-ADM-005 | Het systeem mag in accountoverzicht, accountdetails, relatiebeheer en geschiedenis geen technische identifiers zoals GUID’s, role-id’s, relationship-id’s of external identity-provider-id’s tonen |
REQ-SCH-BEH-03-01-34 | SRS-ADM-005 AC-ADM-005 | Wanneer zoek- en filtercriteria geen accounts opleveren, het systeem een duidelijke lege staat tonen en geen verouderde accountdetails blijven presenteren alsof die nog geselecteerd zijn |
REQ-SCH-BEH-03-01-35 | SRS-NFR-AUD-001 SRS-ADM-005 AC-NFR-AUD-001 AC-ADM-005 | Wanneer accountgegevens of historie niet geladen kunnen worden, het systeem een begrijpelijke foutmelding tonen zonder technische stacktrace of gevoelige loggingdetails zichtbaar te maken |
REQ-SCH-BEH-03-01-36 | SRS-RDM-004 SRS-RDM-007 SRS-RDM-002 SRS-RDM-001 SRS-NFR-AUD-001 SRS-ADM-005 AC-RDM-004 AC-RDM-007 AC-RDM-002 AC-RDM-001 AC-NFR-AUD-001 AC-ADM-005 | Zichtbare namen, e-mailadressen, datums, rollen, statussen, relatie-aantallen en wijzigingsregels dynamisch uit de actuele account-, rol-, relatie- en historycontext worden opgebouwd |
4.7 Technische koppeling
Voor technische uitwerking van accountbeheer zijn vooral relevant:
- 04 Identiteit, authenticatie en rolcontext voor gebruikers, rollen, profielvelden en rolactivatie.
- 05 Autorisatie, policies en server-side contextcontrole voor beheerderrechten op accountinzage en accountmutaties.
- 11 Rolflows technisch voor roltoewijzing, combinatierollen en rolstatussen.
- 12 Relatiebeheer, uitnodigingen en gedeelde oefeningen voor accountgerelateerde ouder-, voogd-, docent- en leerlingrelaties.
- 19 Logging, audit, securitylogging en technische foutafhandeling voor beheerhistorie, auditbare accountacties en foutregistratie.
- 24 Frontend, Blazor, routing, state en componentopbouw voor accountfilters, detailstate en beheerpanelen.
- 25 Privacy, retentie, anonimisering en gegevensbescherming voor profielgegevens, anonimisering en gegevensminimalisatie.