Accounttoegang en account lifecycle
Deze map bevat de generieke usecases voor accounttoegang en account lifecycle binnen OefenHub. Dit subdomein beschrijft hoe een gebruiker na externe authenticatie wordt gekoppeld aan een intern OefenHub-account, hoe de OefenHub-sessiecontext wordt opgebouwd, hoe onvolledige accountcontext veilig wordt afgehandeld en hoe accountverwijdering, anonimisering en uitloggen plaatsvinden.
De usecases in deze map zijn procesgericht. De schermdocumentatie blijft de bron voor exacte UI-opbouw, labels, menu-items, knoppen en visuele foutafhandeling. Deze usecases beschrijven vooral het gedrag achter de schermen: welke accountcontext geldt, welke controles server-side plaatsvinden, welke domeinmutaties wel of niet worden uitgevoerd en welke vervolgprocessen worden gestart.
Usecases
| Usecase | Omschrijving |
|---|---|
| UC-GEN-ACC-001 — Eerste login en account provisioning | Verwerkt een succesvolle externe authenticatie tot een intern OefenHub-account wanneer dit nog niet bestaat, inclusief basisinstellingen en koppeling van geldige pending relatie-uitnodigingen. |
| UC-GEN-ACC-002 — Inloggen en sessie verwerken | Verwerkt een reguliere login via de identity provider tot een geldige OefenHub-sessiecontext voor bestaande gebruikers. |
| UC-GEN-ACC-003 — Geen rol of onvolledig account afhandelen | Handelt gebruikers af die wel geauthenticeerd zijn en een actief intern account hebben, maar nog geen bruikbare rolcontext of verplichte applicatiecontext hebben. |
| UC-GEN-ACC-004 — Account verwijderen aanvragen | Beschrijft hoe een gebruiker het eigen account verwijdert via een expliciete bevestigingsflow binnen OefenHub. |
| UC-GEN-ACC-005 — Account anonimiseren en afhankelijke toegang opruimen | Voert de interne systeemverwerking uit voor anonimisering, toegangsbeëindiging en opruiming van afhankelijke domeincontext na een definitieve verwijdertrigger. |
| UC-GEN-ACC-006 — Uitloggen en sessie beëindigen | Beëindigt de lokale OefenHub-applicatiesessie, realtime context en optionele identity-providerlogout zonder normale logout als domeinobject op te slaan. |
Relevante schermdocumentatie en contexten
| Scherm / context | Relevantie |
|---|---|
| SCH-GEN-00-01 — Niet-ingelogde publieke frontpage | Startpunt voor gebruikers zonder geldige OefenHub-sessie en ingang naar de identity-providerlogin en registratieflow. |
| Externe identity-providerlogin | Verwerkt authenticatie, credentials, wachtwoord-reset, e-mailverificatie en primaire sessie buiten OefenHub. |
| OefenHub-authentication callback | Technische terugkeerroute waar OefenHub de identity-providercontext vertaalt naar interne account- en sessiecontext. |
| Geauthenticeerde frontpage | Doelroute na succesvolle sessieverwerking, afhankelijk van actieve rollen en verplichte context. |
| Frontpage zonder rol | Beperkte geauthenticeerde context wanneer een actief intern account nog geen bruikbare rolcontext heeft. |
| Profiel / accountinstellingen | Ingang voor accountgerelateerde acties zoals profielaanvulling en accountverwijdering. |
| SCH-GEN-09-01 — Toegankelijkheid | Relevante context voor synchronisatie van toegankelijkheidsinstellingen vóór en na login. |
| Ontwerpbronnen — Business rules | Centrale bron voor accountregels rond identity provider, ExternalId, actieve accounts en server-side contextbepaling. |
| Ontwerpbronnen — Autorisatiematrix | Centrale bron voor toegestane accountacties per actor, systeemcomponent en rolcontext. |
| Ontwerpbronnen — Popup-register | Centrale bron voor popupkeys, popupteksten, knopacties en inputvelden. |
| Ontwerpbronnen — Popup-themes | Centrale bron voor popupvarianten, themes en importdefaults. |
Domeinafbakening
| Onderwerp | Afbakening |
|---|---|
| Authenticatie | Wordt afgehandeld door de externe identity provider. OefenHub verwerkt geen wachtwoorden, wachtwoord-reset, e-mailverificatie of credential lifecycle. |
| Intern account | Wordt opgeslagen in Users en via ExternalId gekoppeld aan het externe identity-provideraccount. |
| Accountprovisioning | Maakt na eerste succesvolle externe authenticatie het interne account en basisinstellingen aan wanneer deze nog ontbreken. |
| Sessiecontext | Wordt na login server-side opgebouwd uit het interne account, actieve rollen, UserSettings en business rules. Er bestaat geen aparte OefenHub-domeinsessietabel. |
| Rolcontext | Wordt bepaald uit actieve UserRoles en Roles. Clientstate, routeparameters en oude browsercontext zijn niet leidend. |
| Onvolledig account | Wordt veilig naar een beperkte context, profielroute of verplichte vervolgflow geleid zonder stilzwijgende aannames. |
| Accountverwijdering | Is voor gebruikers één zichtbare verwijderactie, maar leidt intern tot anonimisering en opruiming van afhankelijke toegang. |
| Anonimisering | Vervangt persoonsgegevens door niet-persoonsherleidbare waarden en behoudt noodzakelijke historie onder geanonimiseerde identiteit. |
| Uitloggen | Beëindigt de lokale applicatiesessie en realtime context. Normale logout wordt niet als persistent domeinobject opgeslagen. |
| Identity-provideraccount | Wordt niet door deze OefenHub-usecases verwijderd of inhoudelijk gewijzigd. |
Accountcontexten en lifecycle
| Context / toestand | Betekenis | Hoofdrouting |
|---|---|---|
| Publieke gebruiker | Er is geen geldige OefenHub-sessie. | Publieke startpagina of identity-providerlogin. |
| Extern geauthenticeerd, intern onbekend | De identity provider heeft succesvol geauthenticeerd, maar Users.ExternalId bestaat nog niet intern. | UC-GEN-ACC-001. |
| Intern actief account | Er bestaat precies één actief intern account voor de ontvangen ExternalId. | UC-GEN-ACC-002. |
| Geen actieve rolcontext | Het interne account is actief, maar er is geen bruikbare actieve rol. | UC-GEN-ACC-003. |
| Onvolledige verplichte context | Er is een rolcontext, maar verplichte profiel- of niveaucontext ontbreekt. | UC-GEN-ACC-003 met doorverwijzing naar de betreffende profielusecase. |
| Gedeactiveerd of geanonimiseerd account | Het interne account mag geen reguliere OefenHub-toegang krijgen. | Toegang geweigerd via generieke account- of routeguardafhandeling. |
| Verwijdering aangevraagd | De gebruiker heeft de eigen verwijderactie definitief bevestigd. | UC-GEN-ACC-004 gevolgd door UC-GEN-ACC-005. |
| Lokale sessie beëindigd | De OefenHub-applicatiesessie is beëindigd of ongeldig. | Publieke context of opnieuw inloggen via UC-GEN-ACC-002. |
Bijzondere regels
| Onderwerp | Regel |
|---|---|
| Identity provider | Authenticatie, wachtwoorden, wachtwoord-reset, e-mailverificatie, credential lifecycle en primaire sessie blijven buiten OefenHub. |
ExternalId | Users.ExternalId is de stabiele koppelsleutel naar de identity provider en mag niet via de GUI wijzigbaar zijn. |
| Idempotentie | Provisioning op dezelfde ExternalId mag nooit meerdere interne Users-records opleveren. |
| Actief account | Users.IsActive = false blokkeert reguliere OefenHub-toegang, ook wanneer de identity provider succesvol authenticeert. |
| Laatste activiteit | Users.LastSeenAtUtc wordt alleen bijgewerkt bij succesvolle sessieverwerking voor een actief intern account. |
| Rollen | Alleen actieve roltoekenningen tellen mee voor frontendcontext en autorisatie. |
| Zonder rol | Een gebruiker zonder actieve rolcontext krijgt geen leerling-, ouder/voogd-, docent- of beheerderfrontpage. |
| Verplicht niveau | Ontbrekend verplicht niveau wordt niet automatisch ingevuld, maar afgehandeld via de bestaande profielusecase. |
| Toegankelijkheid | Na login zijn waarden uit UserSettings leidend; browserwaarden zijn afgeleid en mogen geen identiteit of autorisatie bevatten. |
| Pending uitnodigingen | Relatie-uitnodigingen op e-mailadres mogen pas aan een gebruiker worden gekoppeld nadat een intern Users.Id bestaat. |
| Systeemberichten | Uitnodigingsgerelateerde systeemberichten vereisen een interne ontvanger en worden niet aangemaakt voor onbekende e-mailadressen. |
| Reguliere login | Reguliere login maakt geen relaties, relatie-uitnodigingen, systeemberichten, tickets, privéberichten of systeemnotificaties aan. |
| Accountverwijdering | Voor eindgebruikers bestaat geen tussenstatus “verwijderd maar nog niet geanonimiseerd”; de interne verwijderflow leidt direct tot anonimisering en opruiming. |
| Historie | Afgeronde oefengeschiedenis en auditinformatie blijven herleidbaar onder geanonimiseerde identiteit waar functioneel noodzakelijk. |
| Sessietabel | Voor normale login, sessieverwerking en logout wordt geen aparte OefenHub-domeinsessietabel geïntroduceerd. |
| Popups | Usecases verwijzen alleen naar PopupKey. Titel, tekst, knoppen, inputvelden en theme staan centraal in het popup-register en popup-themes. |
Popupverwijzingen
| Usecase | Popupgebruik |
|---|---|
| UC-GEN-ACC-001 | Niet van toepassing. Provisioning gebruikt geen domeinspecifieke popup. |
| UC-GEN-ACC-002 | Niet van toepassing. Login- en sessiefouten verlopen via identity provider, routeguard of generieke toegangafhandeling. |
| UC-GEN-ACC-003 | Niet van toepassing binnen deze accountusecase. Eventuele profiel- of niveauwaarschuwingen horen bij de betreffende profielusecases. |
| UC-GEN-ACC-004 | Gebruikt accountverwijdering-popups, waaronder bevestiging, blokkade en foutafhandeling. De inhoud staat in het popup-register. |
| UC-GEN-ACC-005 | Niet van toepassing. Dit is een interne systeemverwerking zonder eigen schermflow. |
| UC-GEN-ACC-006 | Niet van toepassing. Logout gebruikt routeguard-, sign-out- en identity-providerafhandeling. |
Diagramgebruik binnen account-usecases
De account-usecases gebruiken diagrammen alleen wanneer zij het proces duidelijker maken.
| Diagramtype | Gebruik |
|---|---|
| Sequence diagram | Voor interacties tussen gebruiker, frontend, backend, identity provider, database, berichtenservice, accountservice, routeguard en realtime laag. |
| State diagram | Alleen wanneer een persistent statusobject wordt geraakt. Accounttoegang zelf gebruikt geen aparte accountstatus naast Users.IsActive. |
| Decision flow | Voor validatievolgorde, routekeuzes, onvolledige accountcontext, gedeactiveerde accounts en verwijderblokkades. |
| Data lifecycle | Voor inzicht in welke entiteiten ontstaan, bewust niet ontstaan, geanonimiseerd worden of behouden blijven na accountverwijdering. |