Skip to main content

UC-GEN-ACC-004 — Account verwijderen aanvragen

1. Kerngegevens

VeldWaarde
Usecase-IDUC-GEN-ACC-004
NaamAccount verwijderen aanvragen
DomeinGeneriek / Account
Primaire actorGebruiker
Secundaire actor(en)OefenHub frontend, OefenHub backend, accountservice, autorisatieservice, relatieservice, docentstructuurservice, oefenrunservice, berichtenservice, meldingenservice, accountlogkanaal
RolcontextGeauthenticeerde gebruiker met een actief intern OefenHub-account. De gebruiker handelt namens het eigen account. Beheerderverwijdering van een ander account valt buiten deze usecase.
Betrokken schermenProfiel / accountinstellingen; account-verwijderen-flow; bevestigingspopup; eventuele eigenaarschap-/opvolgerkeuze voor docentniveaus; generieke uitlog- of publieke route na afronding.
Gerelateerde usecasesUC-GEN-ACC-001 — Eerste login en account provisioning; UC-GEN-ACC-002 — Inloggen en sessie verwerken; UC-GEN-ACC-003 — Geen rol of onvolledig account afhandelen; UC-GEN-REL-004 — Relatie ontkoppelen; UC-GEN-MSG-005 — Privéberichtthread verwijderen; UC-GEN-PROF-001 — Profiel bekijken
Primaire entiteitenUsers, UserRoles, UserSettings, accountlogkanaal
Secundaire entiteiten / eventsUserRelationships, RelationshipEvents, RelationshipInvitations, SystemMessages, PrivateMessageThreadParticipants, Tickets, ExerciseRuns, LevelAuthorizations, Levels, LevelCollaborators, SharedExercises, LiveViewAudit, AccountDeletionRequested, AccountAnonymized, AccountDependenciesCleaned, AccountDeletionBlocked
Gerelateerde popupsPOP-GEN-ACC-DELETE-CONFIRM, POP-GEN-ACC-DELETE-BLOCKED, POP-GEN-ACC-DELETE-FAILED
PopupregisterPOP-GEN-ACC-DELETE-CONFIRM, POP-GEN-ACC-DELETE-BLOCKED en POP-GEN-ACC-DELETE-FAILED staan centraal in het popupregister. Popupteksten en knopteksten worden niet in deze usecase gedupliceerd.
MoSCoWMust

2. Omschrijving

Deze usecase beschrijft hoe een ingelogde gebruiker vanuit OefenHub het eigen account verwijdert. Functioneel ziet de gebruiker dit als één verwijderactie met een expliciete bevestiging. Na bevestiging voert OefenHub direct een gecontroleerde verwijder- en anonimiseerflow uit: persoonsgegevens in het interne OefenHub-account worden geanonimiseerd, reguliere toegang wordt beëindigd, relaties en afhankelijke toegang worden opgeruimd en de actie wordt technisch en auditbaar herleidbaar vastgelegd.

De usecase gaat over het interne OefenHub-account en de OefenHub-domeindata. Authenticatie, wachtwoorden, credentials, e-mailverificatie en primaire identity-provideraccounts blijven eigendom van de externe identity provider. OefenHub vraagt of verwerkt daarom geen wachtwoord in deze flow. Wanneer herauthenticatie of extra identiteitscontrole vereist is, verloopt die via de identity-providerflow en niet via een eigen OefenHub-wachtwoordformulier.

Er bestaat voor eindgebruikers geen apart tussenstation waarin het account zichtbaar blijft als “verwijderd maar nog niet geanonimiseerd”. Wanneer de gebruiker de verwijdering definitief bevestigt en de noodzakelijke afhankelijkheden verwerkt kunnen worden, wordt de interne OefenHub-verwijdering direct uitgevoerd. Na afronding heeft de gebruiker geen reguliere OefenHub-applicatietoegang meer met dit interne account.

3. Scope

Deze usecase omvat wel:

  • starten van accountverwijdering door de ingelogde gebruiker voor het eigen account;
  • tonen van een expliciete bevestiging vóór definitieve verwijdering;
  • server-side controleren dat de gebruiker alleen het eigen account verwijdert;
  • bepalen van domeinafhankelijkheden die vóór verwijdering moeten worden verwerkt;
  • verwerken van docentniveau-eigenaarschap wanneer de verwijderende gebruiker eigenaar is van één of meer niveaus;
  • direct anonimiseren van zichtbare persoonsgegevens in Users;
  • blokkeren van verdere reguliere OefenHub-toegang voor het verwijderde/geanonimiseerde interne account;
  • verbreken of beëindigen van actieve relaties en afhankelijke toegang;
  • opruimen of niet-actief maken van openstaande uitnodigingen en openstaande afhankelijkheden die aan het account gekoppeld zijn;
  • voorkomen dat open oefenruns na accountverwijdering hervatbaar blijven;
  • zichtbaar houden van bestaande geschiedenis onder geanonimiseerde identiteit waar historische of functionele reconstructie nodig blijft;
  • beëindigen van de huidige OefenHub-applicatiesessie na succesvolle verwijdering;
  • vastleggen van account lifecycle-logging zonder wachtwoorden, tokens of credentialgegevens.

Deze usecase omvat niet:

  • verwijderen, deactiveren of wijzigen van het externe identity-provideraccount;
  • Keycloak-wachtwoordcontrole, wachtwoord-reset, credentialbeheer of e-mailverificatie;
  • beheerderverwijdering of deactivering van een ander account;
  • accountreactivatie of herstel na anonimisering;
  • export van persoonsgegevens vóór verwijdering;
  • wijzigen van rollen als zelfstandige beheeractie;
  • inhoudelijk verwijderen van oefengeschiedenis, afgeronde oefenruns of auditrecords;
  • verwijderen van privéberichtinhoud uit de mailbox van andere deelnemers buiten de bestaande berichtretentie- en zichtbaarheidsregels;
  • genereren van seeddata of implementatiecode.

4. Pre-condities

IDVoorwaarde
PRE-001De gebruiker is ingelogd en heeft een geldige OefenHub-sessiecontext.
PRE-002De sessiecontext is gekoppeld aan precies één intern Users.Id.
PRE-003Het interne account is actief op het moment dat de gebruiker de verwijderactie start.
PRE-004De accountverwijderactie is bereikbaar vanuit een geautoriseerde eigen-accountcontext, bijvoorbeeld profiel of accountinstellingen.
PRE-005De backend kan server-side vaststellen dat de gebruiker het eigen account verwijdert en niet een ander account via route- of formuliermanipulatie.
PRE-006De backend kan de relevante accountafhankelijkheden bepalen voordat de definitieve anonimisering wordt uitgevoerd.
PRE-007Voor docentaccounts kan de backend bepalen of de gebruiker eigenaar is van niveaus en hoeveel actieve collaborators per niveau beschikbaar zijn.

5. Post-condities

IDResultaat
POST-001Het interne OefenHub-account is geanonimiseerd en reguliere OefenHub-toegang is beëindigd.
POST-002Zichtbare persoonsgegevens in Users zijn vervangen door de vastgestelde geanonimiseerde waarden.
POST-003Het account kan niet opnieuw als regulier nieuw account worden geprovisioneerd voor dezelfde externe identiteit.
POST-004Actieve relaties en afhankelijke toegang die aan het account gekoppeld waren, zijn beëindigd of niet langer bruikbaar.
POST-005Openstaande relatie-uitnodigingen die door of naar het account lopen, zijn niet langer accepteerbaar.
POST-006Open oefenruns van de gebruiker zijn niet langer hervatbaar en verschijnen niet meer in normale geschiedenis- of statistiekweergaven.
POST-007Afgeronde geschiedenis blijft waar nodig historisch raadpleegbaar onder geanonimiseerde identiteit.
POST-008Eventuele docentniveaus waarvan de gebruiker eigenaar was, zijn volgens de collaboratorregels overgedragen of historisch/inactief gemaakt.
POST-009De actieve OefenHub-sessie van de gebruiker is beëindigd.
POST-010De verwijdering, anonimisering en belangrijkste afhankelijkheidsmutaties zijn technisch herleidbaar vastgelegd in het accountlogkanaal en waar relevant in domeinhistorie.
POST-011Wanneer verwijdering niet veilig kan worden afgerond, is het account niet half geanonimiseerd en blijft de bestaande toestand consistent.

6. Trigger

De usecase start wanneer een ingelogde gebruiker vanuit het eigen profiel of de accountinstellingen kiest voor de actie om het eigen account te verwijderen.

7. Normale processtroom

StapActorScherm / componentActieSysteemresponsData / regel
1GebruikerProfiel / accountinstellingenKiest de actie om het eigen account te verwijderen.OefenHub opent de accountverwijderen-flow.De actie is alleen beschikbaar binnen de eigen geauthenticeerde accountcontext.
2OefenHub frontendAccount-verwijderen-flowVraagt de backend om de verwijdercontext voor het eigen account.Backend bepaalt server-side de relevante afhankelijkheden.Frontend levert geen beslissende UserId voor het te verwijderen account.
3OefenHub backendAccountserviceControleert sessie, Users.Id, Users.IsActive en eigen-accountautorisatie.Alleen het eigen actieve account mag via deze flow worden verwijderd.Objectniveau-autorisatie wordt server-side afgedwongen.
4OefenHub backendAfhankelijkhedenanalyseBepaalt relaties, uitnodigingen, open runs, gedeelde oefeningen, meldingen, privéberichtdeelnames, niveauautorisaties en docentniveau-eigenaarschap.De verwijderflow krijgt een complete verwerkingsset voor de definitieve stap.Analyse is read-only.
5OefenHub backendDocentstructuurserviceControleert of de gebruiker eigenaar is van niveaus.Voor niveaus zonder actieve collaborator wordt historisch/inactief maken voorbereid; bij één actieve collaborator wordt automatische overdracht voorbereid; bij meerdere collaborators is opvolgerkeuze vereist.Niveau-eigenaarschap mag niet onbepaald achterblijven.
6GebruikerAccount-verwijderen-flowKiest waar nodig opvolgende eigenaar voor niveaus met meerdere actieve collaborators.OefenHub valideert de gekozen opvolgers.Alleen actieve collaborators van het betreffende niveau zijn geldig.
7OefenHub frontendBevestigingspopupToont de definitieve bevestiging via POP-GEN-ACC-DELETE-CONFIRM.De gebruiker kan annuleren of definitief bevestigen.Popupinhoud komt uit het popupregister.
8GebruikerBevestigingspopupBevestigt definitief dat het account verwijderd moet worden.Frontend verzendt de bevestiging naar de backend.Er wordt geen wachtwoord aan OefenHub gevraagd.
9OefenHub backendAccountservice / transactionele verwerkingStart de gecontroleerde verwijder- en anonimiseerflow.Backend voert de mutaties in een consistente volgorde uit.Falen mag geen half geanonimiseerde, nog bruikbare accounttoestand opleveren.
10OefenHub backendDocentstructuurserviceVerwerkt eigenaarschap van docentniveaus.Zonder collaborator wordt niveau inactief/historisch; met één collaborator wordt eigenaarschap overgedragen; met gekozen opvolger wordt eigenaarschap overgedragen.Geldt alleen voor niveaus waarvan de gebruiker actuele eigenaar is.
11OefenHub backendRelatieserviceBeëindigt actieve relaties en maakt openstaande uitnodigingen niet langer bruikbaar.Relatie- en uitnodigingscontext kan niet meer leiden tot nieuwe toegang of acceptatie.Relaties worden niet hard verwijderd maar historisch herleidbaar beëindigd.
12OefenHub backendAutorisatie- en toegangservicesBeëindigt afhankelijke toegang, zoals niveauautorisaties en relatiegebonden toegang.De verwijderde gebruiker kan geen rolgebonden domeinfuncties meer gebruiken en andere gebruikers krijgen geen toegang meer op basis van deze accountrelaties.Toegang wordt server-side ingetrokken of genegeerd op basis van beëindigde context.
13OefenHub backendOefenrunserviceMaakt open oefenruns niet hervatbaar.Niet-afgeronde runs blijven administratief niet-afgerond maar verdwijnen uit normale geschiedenis- en statistiekweergaven.IsCompleted = false mag blijven staan; hervatten wordt geblokkeerd.
14OefenHub backendAccountservice / databaseAnonimiseert Users en blokkeert reguliere toegang.Zichtbare identiteit wordt vervangen door geanonimiseerde waarden en het account wordt niet langer actief bruikbaar.FirstName = Anoniem, MiddleName = #, LastName = <systeemcode>, Email = anoniem.<code>@verwijderd.acc; IsActive = false.
15OefenHub backendAccountlogkanaal / domeinhistorieLegt de verwijdering, anonimisering en belangrijkste afhankelijkheidsacties vast.De lifecycle-actie is herleidbaar zonder wachtwoorden, tokens of secrets te loggen.Accountlogger en relevante domeinhistorie.
16OefenHub backend / frontendSessiebeheerBeëindigt de OefenHub-sessie van de gebruiker.De gebruiker wordt uitgelogd of naar een publieke route geleid.De geanonimiseerde gebruiker krijgt geen geautoriseerde OefenHub-context meer.

8. Alternatieve en exceptionele processtromen

IDVanaf stapSituatieSysteemgedragPopup / meldingDatamutatie
ALT-0011De gebruiker annuleert vóór de definitieve bevestiging.De flow stopt en de gebruiker blijft in het profiel of de accountinstellingen.Geen of sluiting van POP-GEN-ACC-DELETE-CONFIRM.Geen.
ALT-0023De sessie is verlopen of ongeldig.OefenHub voert geen verwijdering uit en start opnieuw de loginflow of toont toegangafhandeling.Generieke routeguard-/login-afhandeling buiten popupregister.Geen.
ALT-0033De request probeert een ander account dan het eigen account te verwijderen.Backend blokkeert de actie en registreert een autorisatie-incident.POP-GEN-ACC-DELETE-BLOCKED of generieke toegangafhandeling.Technische/securitylogging; geen accountmutatie.
ALT-0043Het account is inmiddels al gedeactiveerd of geanonimiseerd.OefenHub voert de verwijderflow niet opnieuw regulier uit en leidt naar toegangafhandeling.Generieke accountstatusafhandeling.Geen of idempotente technische logging.
ALT-0055Een docent is eigenaar van een niveau zonder actieve collaborator.Het niveau wordt bij definitieve verwerking historisch/inactief gemaakt.Geen aparte popup nodig buiten de verwijderbevestiging.Update op niveau bij stap 10.
ALT-0065Een docent is eigenaar van een niveau met precies één actieve collaborator.De collaborator wordt bij definitieve verwerking automatisch nieuwe eigenaar.Geen aparte popup nodig buiten de verwijderbevestiging.Update op niveau-eigenaarschap bij stap 10.
ALT-0075Een docent is eigenaar van een niveau met twee of meer actieve collaborators.OefenHub vraagt binnen de flow per relevant niveau om een opvolgende eigenaar. Definitieve verwijdering kan pas verder na geldige keuze.Componentgedrag; geen popupregister-popup vereist.Geen mutatie totdat de definitieve flow wordt bevestigd.
ALT-0086Gekozen opvolger is geen actieve collaborator meer.OefenHub weigert de keuze en vraagt een geldige actuele opvolger.Inline validatie binnen de account-verwijderen-flow.Geen.
ALT-0099De transactionele verwerking faalt vóór anonimisering.OefenHub stopt de flow en behoudt de bestaande accounttoestand.POP-GEN-ACC-DELETE-FAILED.Geen afgeronde mutaties of rollback.
ALT-01010-14De verwerking faalt nadat deelmutaties zijn voorbereid.OefenHub rolt terug of herstelt naar een consistente toestand volgens transactionele inrichting.POP-GEN-ACC-DELETE-FAILED.Geen half bruikbare verwijdertoestand.
ALT-01111Een relatie of uitnodiging is intussen al beëindigd of afgehandeld.OefenHub behandelt dit idempotent en verwerkt alleen nog actuele open of actieve afhankelijkheden.Geen.Geen extra mutatie voor reeds afgehandelde records.
ALT-01213Er bestaat een actieve live meekijksessie of actieve oefencontext.OefenHub beëindigt de context als gevolg van accountverwijdering; open run blijft niet hervatbaar.Eventuele meekijkafhandeling volgt het live-meekijkdomein.Open run en sessiecontext worden niet hervatbaar.
ALT-01314Anonimiseringscode botst met een bestaande geanonimiseerde identiteit.OefenHub genereert een andere niet-voorspelbare systeemcode en probeert opnieuw binnen dezelfde verwerking.Geen.Alleen definitieve unieke geanonimiseerde waarde wordt opgeslagen.
ALT-01415Accountlogging kan niet veilig worden uitgevoerd.OefenHub blokkeert de verwijdering of rolt terug, omdat account lifecycle-herleidbaarheid verplicht is.POP-GEN-ACC-DELETE-FAILED.Geen afgeronde accountverwijdering zonder lifecycle-logging.
ALT-01516Uitloggen of sessiebeëindiging faalt client-side.Backend heeft het account al geblokkeerd; vervolgrequests krijgen geen geautoriseerde context meer.Generieke toegangafhandeling.Geen extra domeinmutatie.

9. Business rules

IDRegel
BR-001Een gebruiker mag via deze flow uitsluitend het eigen interne OefenHub-account verwijderen.
BR-002Accountverwijdering door een eindgebruiker leidt direct tot anonimisering; er is geen zichtbaar tussenstation “verwijderd maar nog niet geanonimiseerd”.
BR-003De externe identity provider blijft bronhouder voor authenticatie, wachtwoorden, credentials, e-mailverificatie en primaire sessie.
BR-004OefenHub vraagt of valideert geen wachtwoord binnen de accountverwijderen-flow.
BR-005Na accountverwijdering mag dezelfde ExternalId niet stilzwijgend leiden tot een nieuw regulier OefenHub-account.
BR-006Een geanonimiseerd account krijgt geen reguliere OefenHub-applicatietoegang.
BR-007Zichtbare persoonsgegevens worden vervangen door de vastgestelde geanonimiseerde waarden: Anoniem, #, een niet-voorspelbare systeemcode en een geanonimiseerd e-mailadres.
BR-008De systeemwaarde # voor MiddleName is gereserveerd voor systeemgebruik en mag niet via normale gebruikersinvoer worden opgeslagen.
BR-009Actieve relaties van het account worden beëindigd of niet langer bruikbaar gemaakt; zij worden niet hard verwijderd wanneer historische herleidbaarheid nodig is.
BR-010Openstaande relatie-uitnodigingen die door of naar het account lopen mogen na accountverwijdering niet meer accepteerbaar zijn.
BR-011Accountverwijdering mag geen afgeronde oefengeschiedenis hard verwijderen wanneer die geschiedenis functioneel of historisch nodig blijft.
BR-012Bestaande geschiedenis wordt na accountverwijdering alleen nog onder geanonimiseerde identiteit getoond.
BR-013Open oefenruns van het verwijderde account mogen niet meer hervatbaar zijn en tellen niet mee in normale geschiedenis- of statistiekweergaven.
BR-014Wanneer een verwijderende docent eigenaar is van een niveau zonder actieve collaborator, wordt dat niveau historisch/inactief gemaakt.
BR-015Wanneer een verwijderende docent eigenaar is van een niveau met precies één actieve collaborator, wordt eigenaarschap automatisch aan die collaborator overgedragen.
BR-016Wanneer een verwijderende docent eigenaar is van een niveau met twee of meer actieve collaborators, moet vóór definitieve verwijdering een geldige opvolgende eigenaar gekozen worden.
BR-017Accountverwijdering moet technisch en auditbaar herleidbaar zijn via het accountlogkanaal en relevante domeinhistorie.
BR-018Account lifecycle-logging mag geen wachtwoorden, tokens, secrets of vergelijkbare authenticatiegegevens bevatten.
BR-019Falen van de verwijderflow mag niet leiden tot een half geanonimiseerd account dat nog reguliere toegang heeft.
BR-020Beheerderdeactivering en beheerderverwijdering van andere accounts zijn aparte beheerflows en vallen niet onder deze selfservice-usecase.

10. Datavalidatie

Veld / objectValidatie
SessiecontextMoet geldig zijn en gekoppeld zijn aan precies één intern Users.Id.
Te verwijderen accountMoet gelijk zijn aan het account van de ingelogde gebruiker. Routeparameters of formulierwaarden mogen dit niet overschrijven.
Users.IsActiveMoet true zijn bij het starten van de reguliere selfservice-verwijderflow.
VerwijderbevestigingMoet expliciet door de gebruiker zijn gegeven via de bevestigingsactie.
Users.ExternalIdBlijft geschikt om latere reprovisioning met dezelfde externe identiteit te blokkeren of veilig af te handelen volgens de account lifecycle-regels.
Geanonimiseerde systeemcodeMoet niet-voorspelbaar en uniek genoeg zijn om zichtbare identiteit niet tot de oorspronkelijke gebruiker te herleiden.
Geanonimiseerd e-mailadresMoet voldoen aan het patroon anoniem.<code>@verwijderd.acc en mag niet botsen met een bestaand actief e-mailadres.
MiddleNameDe waarde # mag alleen door systeemprocessen worden gezet.
Niveau-opvolgerMoet een actieve collaborator zijn op het betreffende niveau.
RelatiesAlleen actieve relaties van of naar de gebruiker worden beëindigd; reeds inactieve relaties blijven historisch ongewijzigd.
Relatie-uitnodigingenAlleen openstaande uitnodigingen die door of naar het account lopen worden niet langer accepteerbaar gemaakt.
Open oefenrunsAlleen niet-afgeronde runs van de gebruiker worden niet-hervatbaar gemaakt; afgeronde runs blijven historisch raadpleegbaar onder geanonimiseerde identiteit.
AccountlogMoet de lifecycle-actie kunnen vastleggen zonder credentialgegevens, tokens of secrets.

11. Datamutaties en events

StapTypeEntiteit / eventMutatie
3ReadUsersLeest en valideert het eigen actieve account op basis van de sessiecontext.
4ReadAfhankelijke domeinrecordsLeest relaties, uitnodigingen, berichtencontext, meldingencontext, oefenruns, gedeelde oefeningen, niveauautorisaties en docentstructuurafhankelijkheden.
5ReadLevels, LevelCollaboratorsBepaalt of de gebruiker eigenaar is van niveaus en hoeveel actieve collaborators beschikbaar zijn.
7ReadPopupregisterGebruikt POP-GEN-ACC-DELETE-CONFIRM voor de definitieve bevestiging.
9Technisch eventAccountDeletionRequestedLegt vast dat de definitieve verwijderflow is bevestigd en gestart.
10UpdateLevelsMaakt niveau historisch/inactief wanneer de verwijderende eigenaar geen actieve collaborator heeft.
10UpdateLevelsDraagt eigenaarschap over aan één actieve collaborator of aan de gekozen geldige opvolger.
10Event / historyLevelOwnershipTransferredDueToAccountDeletionLegt eigendomsoverdracht door accountverwijdering historisch vast.
11UpdateUserRelationshipsBeëindigt actieve relaties van of naar het account via administratieve deactivering.
11CreateRelationshipEventsLegt relatiebeëindiging door accountverwijdering vast.
11UpdateRelationshipInvitationsMaakt openstaande uitnodigingen van of naar het account niet langer accepteerbaar.
12UpdateLevelAuthorizationsBeëindigt of neutraliseert niveauautorisaties die afhankelijk zijn van het verwijderde account.
12UpdatePrivateMessageThreadParticipantsBeëindigt de zichtbaarheid of deelname van het verwijderde account volgens berichtendomeinregels.
12UpdateSharedExercisesMaakt openstaande gedeelde-oefeningafhankelijkheden van het verwijderde account niet langer bruikbaar waar dat nodig is.
12UpdateTickets / ticketcontextBeëindigt open gebruikersactie voor meldingen van het verwijderde account en toont betrokken identiteit voortaan geanonimiseerd.
13UpdateExerciseRunsOpen runs blijven administratief niet-afgerond maar worden niet meer hervatbaar en niet zichtbaar in normale geschiedenis/statistiek.
14UpdateUsersZet zichtbare identiteit om naar geanonimiseerde waarden en blokkeert reguliere toegang, minimaal via IsActive = false.
14UpdateUserSettingsMaakt instellingen niet langer actief toepasbaar voor reguliere gebruikersflows of laat ze alleen historisch gekoppeld aan het geanonimiseerde account bestaan.
14Technisch eventAccountAnonymizedLegt vast dat het interne account is geanonimiseerd.
15LogAccountlogkanaalLegt oude en nieuwe identiteit afgeschermd vast volgens accountloggerregels.
15Technisch eventAccountDependenciesCleanedLegt vast dat afhankelijke domeincontext is opgeruimd of beëindigd.
16TechnischApplicatiesessieBeëindigt of ongeldig maakt de actuele OefenHub-sessiecontext.
ALT-003Technisch eventAccountDeletionDeniedForDifferentUserLegt geblokkeerde poging tot verwijderen van een ander account vast.
ALT-009 / ALT-010 / ALT-014Technisch eventAccountDeletionBlockedLegt vast dat de verwijderflow niet is afgerond door validatie-, transactie- of loggingprobleem.

12. Geen datamutaties

EntiteitReden
Identity-provideraccountOefenHub beheert de externe identity-providergebruiker niet binnen deze usecase.
Wachtwoorden / credentialsOefenHub bewaart, controleert of wijzigt geen wachtwoorden of credentialgegevens.
Identity-provider-sessiesPrimaire sessieafhandeling bij de identity provider valt buiten OefenHub-domeinmutaties.
RolesAccountverwijdering wijzigt de rolcatalogus niet.
ProfileAvatarsDe vaste avatarset wordt niet gewijzigd.
Afgeronde ExerciseRunsAfgeronde runs worden niet hard verwijderd; de zichtbare gebruiker wordt geanonimiseerd.
Audit- en historyrecordsBestaande historie wordt niet hard verwijderd wanneer deze nodig blijft voor functionele of technische herleidbaarheid.
Privéberichtinhoud van andere deelnemersDe mailboxzichtbaarheid en retentie van andere deelnemers volgt het berichtendomein; deze usecase verwijdert niet generiek hun threadinhoud.
SiteNotificationsAccountverwijdering maakt, wijzigt of sluit geen systeemnotificaties.
SiteFeatureTogglesFeaturetoggles worden niet gewijzigd.
Nieuwe accountstatus-entiteitAccountverwijdering gebruikt bestaande accountvelden, anonimisering en logging; er wordt geen aparte accountstatus- of verwijderaanvraagtabel geïntroduceerd.
Sessie-entiteitEr is geen aparte OefenHub-sessietabel; sessiebeëindiging is technische applicatielogica.

13. State diagram

Er is geen los accountstatusmodel naast bestaande accountvelden en lifecyclelogica. Omdat deze usecase de functionele accounttoestand wel definitief verandert, toont het onderstaande diagram de afgeleide accountlifecycle rond verwijdering.

14. Decision flow

15. Data lifecycle diagram

16. Sequence diagrammen

16.1 Succesvolle selfservice-accountverwijdering

16.2 Verwijdering met docentniveau-overdracht

16.3 Verwijdering geblokkeerd

17. Popupverwijzingen

PopupKeyMomentVariantDoel
POP-GEN-ACC-DELETE-CONFIRMVóór definitieve verwijdering na afhankelijkheidsanalyse en eventuele opvolgerkeuze.ConfirmLaat de gebruiker de accountverwijdering expliciet bevestigen.
POP-GEN-ACC-DELETE-BLOCKEDWanneer de gebruiker de actie niet mag uitvoeren of de huidige context verwijderen blokkeert.InfoOnlyLegt uit dat accountverwijdering niet kan worden uitgevoerd vanuit deze context.
POP-GEN-ACC-DELETE-FAILEDWanneer de gecontroleerde verwijder- en anonimiseerflow niet veilig kon worden afgerond.InfoOnlyGeeft aan dat het account niet is verwijderd en dat de bestaande toestand behouden blijft.

18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification

DoeldocumentAfleiding
Functioneel OntwerpBeschrijf accountverwijdering als selfserviceflow vanuit het eigen profiel of accountinstellingen met expliciete bevestiging.
Functioneel OntwerpBeschrijft dat selfservice-accountverwijdering direct leidt tot interne anonimisering en geen aparte eindgebruikersstatus “verwijderd maar nog niet geanonimiseerd” kent.
Functioneel OntwerpBeschrijf de zichtbare gevolgen: gebruiker verliest toegang, relaties worden beëindigd, open runs zijn niet hervatbaar en historie blijft alleen geanonimiseerd zichtbaar.
Functioneel OntwerpBeschrijf de docentregel voor eigenaarschap van niveaus bij accountverwijdering: geen collaborator betekent historisch/inactief, één collaborator betekent automatische overdracht, meerdere collaborators betekent opvolger kiezen.
Functioneel OntwerpBeschrijft dat Keycloak/identity provider bronhouder blijft voor credentials en dat OefenHub geen wachtwoord vraagt of wijzigt in deze flow.
Technisch Ontwerp: identiteit, authenticatie en rolcontext, privacy en anonimisering, logging en foutafhandelingBeschrijft de verwijder- en anonimiseerflow transactioneel of herstelbaar zodat geen half geanonimiseerde bruikbare accounttoestand ontstaat.
Technisch Ontwerp: identiteit, authenticatie en rolcontext, privacy en anonimisering, logging en foutafhandelingBeschrijft de volgorde uit voor afhankelijkhedenanalyse, niveau-eigenaarschap, relatiebeëindiging, autorisatiebeëindiging, open runs, anonimisering, logging en sessiebeëindiging.
Technisch Ontwerp: identiteit, authenticatie en rolcontext, privacy en anonimisering, logging en foutafhandelingBeschrijft dat ExternalId niet mag leiden tot stille reprovisioning na accountverwijdering.
Technisch Ontwerp: identiteit, authenticatie en rolcontext, privacy en anonimisering, logging en foutafhandelingWerk account lifecycle-logging uit in een afgeschermd accountlogkanaal zonder wachtwoorden, tokens of secrets.
Technisch Ontwerp: identiteit, authenticatie en rolcontext, privacy en anonimisering, logging en foutafhandelingWerk popupkeys voor accountverwijdering uit in het popupregister en koppel ze aan het popupbeheer.
Software Requirements SpecificationBevat requirements voor selfservice-accountverwijdering, directe anonimisering, dependency cleanup, docentniveau-overdracht, blokkade van reprovisioning en veilige foutafhandeling.
Database-informatieWerk Users, UserSettings, UserRelationships, RelationshipInvitations, ExerciseRuns, docentniveau-eigenaarschap, accountlogging en historygevolgen uit.
ArchitectuurLeg de grens vast tussen interne OefenHub-accountverwijdering en externe identity-provideraccount lifecycle.

19. SRS-trace

Deze usecase bevat geen normatieve requirementtekst. De centrale eis en acceptatiecriteria staan in de SRS; onderstaande tabel koppelt de usecase-afleiding alleen aan centrale SRS-*- en AC-*-items.

Usecase-afleidingDektUsecasecontext
REQ-UC-GEN-ACC-004-001SRS-AUTH-001
SRS-ACC-002
SRS-ACC-004
AC-AUTH-001
AC-ACC-002
AC-ACC-004
Een ingelogde gebruiker de mogelijkheid bieden om het eigen OefenHub-account te verwijderen vanuit een geautoriseerde eigen-accountcontext
REQ-UC-GEN-ACC-004-002SRS-AUTH-001
SRS-ACC-002
SRS-ACC-004
AC-AUTH-001
AC-ACC-002
AC-ACC-004
Server-side afdwingen dat een gebruiker via deze flow uitsluitend het eigen account kan verwijderen
REQ-UC-GEN-ACC-004-003SRS-ACC-002
SRS-ACC-004
SRS-POP-001
AC-ACC-002
AC-ACC-004
AC-POP-001
Vóór definitieve accountverwijdering een expliciete bevestiging vragen via het popupregister
REQ-UC-GEN-ACC-004-004SRS-ACC-002
SRS-ACC-004
SRS-NFR-SEC-001
SRS-NFR-PRV-001
AC-ACC-002
AC-ACC-004
AC-NFR-SEC-001
AC-NFR-PRV-001
Binnen OefenHub geen wachtwoord of credentialgegevens vragen, opslaan of valideren voor accountverwijdering
REQ-UC-GEN-ACC-004-005SRS-ACC-002
SRS-ACC-004
SRS-NFR-PRV-001
AC-ACC-002
AC-ACC-004
AC-NFR-PRV-001
Accountverwijdering direct verwerken als gecontroleerde anonimiseer- en opruimflow zonder apart eindgebruikers-tussenstation
REQ-UC-GEN-ACC-004-006SRS-ACC-002
SRS-ACC-004
SRS-ACC-008
SRS-NFR-PRV-001
AC-ACC-002
AC-ACC-004
AC-ACC-008
AC-NFR-PRV-001
Zichtbare persoonsgegevens van het interne account vervangen door vastgestelde geanonimiseerde waarden
REQ-UC-GEN-ACC-004-007SRS-AUTH-001
SRS-ACC-002
SRS-ACC-004
SRS-ACC-008
SRS-NFR-PRV-001
AC-AUTH-001
AC-ACC-002
AC-ACC-004
AC-ACC-008
AC-NFR-PRV-001
Reguliere OefenHub-toegang blokkeren voor het geanonimiseerde account
REQ-UC-GEN-ACC-004-008SRS-ACC-001
SRS-ACC-004
AC-ACC-001
AC-ACC-004
Voorkomen dat dezelfde externe identiteit na accountverwijdering stilzwijgend opnieuw als regulier nieuw account wordt geprovisioneerd
REQ-UC-GEN-ACC-004-009SRS-ACC-002
SRS-ACC-004
SRS-REL-003
SRS-REL-006
AC-ACC-002
AC-ACC-004
AC-REL-003
AC-REL-006
Actieve relaties van of naar het verwijderde account beëindigen of niet langer bruikbaar maken
REQ-UC-GEN-ACC-004-010SRS-ACC-002
SRS-ACC-004
SRS-REL-002
AC-ACC-002
AC-ACC-004
AC-REL-002
Openstaande relatie-uitnodigingen van of naar het verwijderde account niet langer accepteerbaar maken
REQ-UC-GEN-ACC-004-011SRS-AUTH-001
SRS-ACC-002
SRS-REL-003
SRS-REL-006
SRS-CAT-001
AC-AUTH-001
AC-ACC-002
AC-REL-003
AC-REL-006
AC-CAT-001
Afhankelijke niveauautorisaties en relatiegebonden toegang beëindigen of niet langer toepassen
REQ-UC-GEN-ACC-004-012SRS-ACC-002
SRS-ACC-004
SRS-LRN-002
SRS-LRN-007
SRS-NFR-AUD-001
AC-ACC-002
AC-ACC-004
AC-LRN-002
AC-LRN-007
AC-NFR-AUD-001
Open oefenruns van het verwijderde account niet langer hervatbaar maken en buiten normale geschiedenis- en statistiekweergaven houden
REQ-UC-GEN-ACC-004-013SRS-ACC-002
SRS-ACC-004
SRS-ACC-008
SRS-NFR-PRV-001
SRS-NFR-AUD-001
AC-ACC-002
AC-ACC-004
AC-ACC-008
AC-NFR-PRV-001
AC-NFR-AUD-001
Afgeronde geschiedenis waar nodig historisch beschikbaar houden onder geanonimiseerde identiteit
REQ-UC-GEN-ACC-004-014SRS-ACC-002
SRS-ACC-004
SRS-ACC-006
SRS-CAT-005
SRS-TCH-006
AC-ACC-002
AC-ACC-004
AC-ACC-006
AC-CAT-005
AC-TCH-006
Bij verwijdering van een docent die eigenaar is van een niveau zonder actieve collaborator het niveau historisch of inactief maken
REQ-UC-GEN-ACC-004-015SRS-ACC-002
SRS-ACC-004
SRS-CAT-001
SRS-TCH-006
AC-ACC-002
AC-ACC-004
AC-CAT-001
AC-TCH-006
Bij verwijdering van een docent die eigenaar is van een niveau met precies één actieve collaborator het eigenaarschap automatisch aan die collaborator overdragen
REQ-UC-GEN-ACC-004-016SRS-ACC-002
SRS-ACC-004
SRS-CAT-001
SRS-TCH-006
AC-ACC-002
AC-ACC-004
AC-CAT-001
AC-TCH-006
Bij verwijdering van een docent die eigenaar is van een niveau met meerdere actieve collaborators vóór definitieve verwijdering een geldige opvolgende eigenaar laten kiezen
REQ-UC-GEN-ACC-004-017SRS-ACC-002
SRS-ACC-004
SRS-NFR-PRV-001
SRS-NFR-AUD-001
AC-ACC-002
AC-ACC-004
AC-NFR-PRV-001
AC-NFR-AUD-001
Accountverwijdering, anonimisering en de belangrijkste afhankelijkheidsmutaties technisch herleidbaar vastleggen in een accountlogkanaal
REQ-UC-GEN-ACC-004-018SRS-ACC-002
SRS-NFR-SEC-001
SRS-NFR-LOG-001
AC-ACC-002
AC-NFR-SEC-001
AC-NFR-LOG-001
Wachtwoorden, tokens, secrets of vergelijkbare authenticatiegegevens niet opnemen in account lifecycle-logging
REQ-UC-GEN-ACC-004-019SRS-ACC-002
SRS-ACC-004
SRS-ACC-007
AC-ACC-002
AC-ACC-004
AC-ACC-007
De actieve OefenHub-sessie beëindigen nadat accountverwijdering succesvol is afgerond
REQ-UC-GEN-ACC-004-020SRS-AUTH-001
SRS-ACC-002
SRS-ACC-004
SRS-ACC-008
SRS-NFR-SEC-001
SRS-NFR-PRV-001
AC-AUTH-001
AC-ACC-002
AC-ACC-004
AC-ACC-008
AC-NFR-SEC-001
AC-NFR-PRV-001
Falende accountverwijdering veilig afhandelen zonder half geanonimiseerde accounttoestand met reguliere toegang