Skip to main content

UC-GEN-ACC-005 — Account anonimiseren en afhankelijke toegang opruimen

1. Kerngegevens

VeldWaarde
Usecase-IDUC-GEN-ACC-005
NaamAccount anonimiseren en afhankelijke toegang opruimen
DomeinGeneriek / Account
Primaire actorSysteem
Secundaire actor(en)Accountservice, autorisatieservice, relatieservice, berichtenservice, meldingenservice, docentstructuurservice, oefenrunservice, deelservice, live-meekijkservice, accountlogkanaal, database
RolcontextInterne systeemverwerking na een definitief bevestigde accountverwijdering of een geautoriseerde beheeractie die dezelfde anonimiseer- en opruimregels gebruikt. De actor die de verwijdering heeft geïnitieerd blijft als triggercontext beschikbaar voor logging en autorisatie, maar deze usecase is zelf geen scherm- of gebruikersdialoog.
Betrokken schermenNiet van toepassing als primair scherm. Deze usecase wordt aangeroepen vanuit UC-GEN-ACC-004 — Account verwijderen aanvragen of vanuit een beheerflow voor accountverwijdering. Eventuele voorafgaande bevestigings- of opvolgerkeuzeschermen horen bij de aanroepende usecase.
Gerelateerde usecasesUC-GEN-ACC-001 — Eerste login en account provisioning; UC-GEN-ACC-002 — Inloggen en sessie verwerken; UC-GEN-ACC-004 — Account verwijderen aanvragen; UC-GEN-REL-004 — Relatie ontkoppelen; UC-GEN-MSG-005 — Privéberichtthread verwijderen; UC-GEN-TIC-014 — Melding heropenen door beheerder; UC-GEN-PROF-001 — Profiel bekijken
Primaire entiteitenUsers, UserRoles, UserSettings, accountlogkanaal
Secundaire entiteiten / eventsUserRelationships, RelationshipEvents, RelationshipInvitations, SystemMessages, PrivateMessageThreadParticipants, PrivateMessages, Tickets, TicketAssignments, TicketDiscussionMessages, TicketHistory, LevelAuthorizations, Levels, LevelCollaborators, Exercises, ExerciseRuns, SharedExercises, LiveViewAudit, AccountAnonymizationStarted, AccountIdentityAnonymized, AccountAccessRevoked, AccountRelationshipsDeactivated, AccountInvitationsInvalidated, AccountTeachingAccessCleaned, AccountExerciseRunsDetachedFromActiveUse, AccountMessagesDetachedFromActiveUse, AccountTicketsDetachedFromActiveUse, AccountAnonymizationCompleted, AccountAnonymizationFailed
Gerelateerde popupsNiet van toepassing
PopupregisterGeen nieuwe popupregister-popups. Deze usecase is een systeemverwerking; bevestiging, blokkade of foutmelding hoort bij de aanroepende gebruikers- of beheerusecase.
MoSCoWMust

2. Omschrijving

Deze usecase beschrijft de interne OefenHub-verwerking waarmee een account na een definitieve verwijderbeslissing wordt geanonimiseerd en waarmee afhankelijke toegang, relaties en openstaande domeincontext worden opgeruimd. De gebruiker ziet deze verwerking niet als afzonderlijke schermflow. Vanuit gebruikersperspectief is de verwijderactie al bevestigd in UC-GEN-ACC-004; deze usecase borgt daarna dat de database- en domeincontext consistent, auditbaar en privacybewust wordt aangepast.

De verwerking anonimiseert zichtbare persoonsgegevens in het interne Users-record, beëindigt reguliere OefenHub-toegang, deactiveert roltoekenningen en relaties waar nodig, maakt openstaande uitnodigingen niet langer bruikbaar, beëindigt afhankelijke niveau- en leerlingtoegang, voorkomt hervatting van open oefenruns en zorgt dat bestaande historie alleen nog onder geanonimiseerde identiteit zichtbaar is.

De externe identity provider blijft buiten deze usecase. OefenHub wijzigt geen wachtwoorden, credentialgegevens, identity-providerclaims of primaire identity-provideraccounts. De interne ExternalId-koppeling blijft zodanig beheerst dat dezelfde externe identiteit niet stilzwijgend opnieuw als regulier nieuw OefenHub-account kan worden geprovisioneerd.

3. Scope

Deze usecase omvat wel:

  • uitvoeren van de anonimiseer- en opruimverwerking na een definitieve verwijdertrigger;
  • server-side valideren dat de verwerking op precies één intern Users-record wordt uitgevoerd;
  • blokkeren van reguliere toegang door het account inactief te maken;
  • anonimiseren van zichtbare persoonsgegevens in Users;
  • deactiveren of beëindigen van actieve roltoekenningen;
  • bewaren van de technische externe koppeling of een gelijkwaardige blokkeerreferentie om ongewenste reprovisioning te voorkomen;
  • beëindigen van actieve relaties en vastleggen van relatie-events;
  • ongeldig maken van openstaande relatie-uitnodigingen door of naar het account;
  • beëindigen van niveauautorisaties, docent-leerlingtoegang en andere rolgebonden toegang die afhankelijk is van het account;
  • verwerken van niveau-eigenaarschap en collaboratorcontext wanneer het account docentcontext had;
  • loskoppelen van actieve privéberichtdeelnames uit de zichtbare mailboxcontext van het verwijderde account zonder threadinhoud voor andere deelnemers generiek te verwijderen;
  • afhandelen van meldingen en ticketcontext waarin het account melder, beheerder of deelnemer was;
  • beëindigen van live-meekijksessies of auditcontexten waarin het account actief betrokken was;
  • voorkomen dat open oefenruns nog hervatbaar zijn;
  • behoud van afgeronde oefengeschiedenis en auditrecords onder geanonimiseerde identiteit;
  • vastleggen van technische/accountlogging zonder tokens, wachtwoorden of secrets;
  • transactionele bewaking tegen half uitgevoerde anonimisering.

Deze usecase omvat niet:

  • de gebruikersbevestiging voor accountverwijdering;
  • keuze van een opvolgende eigenaar door de gebruiker;
  • beheerderdeactivering als afzonderlijke beheeractie;
  • verwijderen of wijzigen van het externe identity-provideraccount;
  • wachtwoordcontrole, wachtwoord-reset of credential lifecycle;
  • export van persoonsgegevens vóór verwijdering;
  • hard verwijderen van afgeronde oefenruns, auditrecords, historie of private-message-inhoud van andere deelnemers;
  • aanpassen van functionele rolcatalogi, statuscatalogi, popupdefinities of systeemnotificaties;
  • genereren van seeddata, importscripts of implementatiecode.

4. Pre-condities

IDVoorwaarde
PRE-001Er is een definitieve en geautoriseerde verwijdertrigger ontvangen vanuit een aanroepende usecase.
PRE-002De triggercontext verwijst naar precies één intern Users.Id.
PRE-003De autorisatie voor de verwijdertrigger is al bepaald door de aanroepende usecase.
PRE-004De backend kan het interne account inclusief rollen, instellingen en afhankelijkheden server-side laden.
PRE-005De backend kan bepalen welke relaties, uitnodigingen, berichten, meldingen, oefenruns, gedeelde oefeningen, niveauautorisaties, levels en live-meekijkcontext aan het account gekoppeld zijn.
PRE-006Wanneer het account eigenaar is van docentniveaus waarvoor meerdere actieve collaborators bestaan, is per niveau een geldige opvolger aangeleverd door de aanroepende usecase.
PRE-007Het accountlogkanaal is beschikbaar om de lifecycle-actie herleidbaar vast te leggen.
PRE-008De verwerking kan binnen een beheerste transactie of transactionele workflow worden uitgevoerd, zodat een gedeeltelijke verwerking niet tot een bruikbare half-geanonimiseerde accounttoestand leidt.

5. Post-condities

IDResultaat
POST-001Het interne account is geanonimiseerd en reguliere OefenHub-toegang is beëindigd.
POST-002Zichtbare persoonsgegevens zijn vervangen door de vastgestelde geanonimiseerde waarden.
POST-003Het account is niet langer bruikbaar als actieve gebruiker in login-, frontend-, relatie-, berichten-, meldingen-, oefen- of live-meekijkflows.
POST-004Actieve roltoekenningen leveren geen actieve frontendcontext meer op.
POST-005Actieve relaties van of naar het account zijn administratief beëindigd en vastgelegd via relatie-events.
POST-006Openstaande relatie-uitnodigingen van of naar het account zijn niet langer accepteerbaar.
POST-007Afhankelijke leerling-, docent-, ouder-/voogd- en collaborator-toegang is beëindigd of overgedragen volgens de domeinregels.
POST-008Docentniveaus waarvan het account eigenaar was, hebben een geldige nieuwe eigenaar of zijn historisch/inactief gemaakt volgens de beschikbare collaboratorcontext.
POST-009Open oefenruns van het account zijn niet meer hervatbaar en tellen niet mee in normale geschiedenis- of statistiekweergaven.
POST-010Afgeronde geschiedenis, auditrecords en historisch noodzakelijke gegevens blijven raadpleegbaar onder geanonimiseerde identiteit.
POST-011Privéberichtthreads en systeemberichten blijven voor andere betrokkenen volgens hun eigen domeinregels bestaan, maar het verwijderde account heeft geen mailboxzichtbaarheid of actieve deelname meer.
POST-012Open meldingen of beheercontexten waarin het account betrokken was, zijn zodanig aangepast dat opvolging door bevoegde gebruikers mogelijk blijft zonder persoonsgegevens van het verwijderde account te tonen.
POST-013Actieve live-meekijksessies van of naar het account zijn beëindigd; auditregels blijven historisch beschikbaar onder geanonimiseerde identiteit.
POST-014De anonimisering en opruiming zijn technisch herleidbaar vastgelegd in accountlogging en relevante domeinhistorie.
POST-015Bij een verwerkingsfout is geen reguliere toegang ontstaan voor een half-geanonimiseerd account en is de fout veilig gelogd.

6. Trigger

De usecase start wanneer een aanroepende usecase, zoals UC-GEN-ACC-004, na definitieve bevestiging de backend opdracht geeft om het interne account te anonimiseren en de afhankelijke toegang op te ruimen.

7. Normale processtroom

StapActorScherm / componentActieSysteemresponsData / regel
1Aanroepende usecaseAccountverwijdering / beheerflowGeeft een definitieve verwijdertrigger door aan de accountservice.Accountservice start de systeemverwerking.De trigger bevat Users.Id, actorcontext en eventuele opvolgerkeuzes.
2AccountserviceBackendValideert dat precies één intern account wordt verwerkt.Verwerking gaat alleen door bij een eenduidige accountcontext.Route- of clientwaarden zijn niet leidend.
3AccountserviceBackendLaadt het actuele Users-record, rollen, instellingen en technische koppeling.Accountservice bepaalt of het account nog verwerkbaar is.Users.ExternalId blijft relevant voor reprovisioningblokkade.
4AccountserviceTransactiecoördinatieStart een transactionele verwerking of workflow met rollback-/compensatiebewaking.De verwerking wordt als één consistente lifecycleactie behandeld.Half uitgevoerde anonimisering mag geen actieve toegang opleveren.
5AccountserviceAccountlogkanaalRegistreert de start van anonimisering.AccountAnonymizationStarted wordt technisch herleidbaar vastgelegd.Logging bevat geen wachtwoorden, tokens of secrets.
6AutorisatieserviceRollen en contextDeactiveert of beëindigt actieve UserRoles voor reguliere contextbepaling.Het account levert geen actieve frontendcontext meer op.De rolcatalogus zelf wijzigt niet.
7RelatieserviceRelatiesDeactiveert actieve relaties van of naar het account.Relaties blijven historisch aanwezig maar zijn niet actief.UserRelationships.IsActive = false; relatie-events worden vastgelegd.
8RelatieserviceUitnodigingenMaakt openstaande uitnodigingen van of naar het account niet langer accepteerbaar.Pending uitnodigingen kunnen niet meer worden geaccepteerd.Uitnodigingen worden niet hard verwijderd.
9DocentstructuurserviceNiveaus en collaboratorsVerwerkt niveaus waarvan het account eigenaar is.Niveau-eigenaarschap wordt overgedragen of het niveau wordt historisch/inactief gemaakt.Alleen actieve collaborators kunnen opvolger zijn.
10DocentstructuurserviceNiveauautorisatiesBeëindigt leerling- en docenttoegang die afhankelijk is van het account.Leerlingen, docenten of ouders krijgen geen toegang meer via de verwijderde relatie- of rolcontext.Historische autorisatieregels blijven herleidbaar.
11BerichtenservicePrivéberichten en systeemberichtenBeëindigt actieve mailboxzichtbaarheid en deelname van het verwijderde account.Andere deelnemers behouden hun zichtbaarheid volgens berichtendomeinregels.Threadinhoud wordt niet generiek hard verwijderd.
12MeldingenserviceTickets en beheercontextVerwerkt meldingen waarin het account melder, beheerder of deelnemer is.Open opvolging blijft mogelijk zonder persoonsgegevens van het account te tonen.Beheerderkoppelingen van het verwijderde account worden beëindigd.
13OefenrunserviceOefenrunsMarkeert open runs van het account als niet-hervatbaar voor reguliere gebruikersflows.Open runs verschijnen niet meer in normale geschiedenis, statistiek of verdergaanlogica.Afgeronde runs blijven historisch beschikbaar onder geanonimiseerde identiteit.
14DeelserviceGedeelde oefeningenNeutraliseert open gedeelde-oefeningafhankelijkheden van of naar het account waar nodig.Ontvangers houden reeds uitgevoerde geschiedenis; open afhankelijkheden van het verwijderde account worden niet langer actief bruikbaar.Ontvangen gedeelde oefeningen worden niet als nieuwe runs aangemaakt door deze flow.
15Live-meekijkserviceLive-meekijkenBeëindigt actieve live-meekijksessies waarbij het account meekijkt of bekeken wordt.Realtime deelname stopt; audit blijft historisch beschikbaar.LiveViewAudit.EndedAtUtc wordt gevuld waar nodig.
16AccountserviceUsersVervangt zichtbare identiteit door geanonimiseerde waarden en zet reguliere toegang uit.Het account is geanonimiseerd en inactief.FirstName = Anoniem, MiddleName = #, LastName = <systeemcode>, Email = anoniem.<code>@verwijderd.acc, IsActive = false.
17AccountserviceUserSettingsMaakt gebruikersinstellingen niet langer actief toepasbaar in reguliere flows.Instellingen blijven alleen historisch gekoppeld waar nodig.Voorkeuren en toegankelijkheidswaarden leveren geen actieve context meer op.
18AccountserviceAccountlogkanaalRegistreert oude en nieuwe zichtbare identiteit in afgeschermde accountlogging.De lifecycleactie is technisch herleidbaar.Afgeschermde logging is geen gebruikersgerichte historie.
19AccountserviceTransactiecoördinatieRondt de verwerking af.Mutaties worden definitief vastgelegd.AccountAnonymizationCompleted wordt vastgelegd.
20AccountserviceApplicatiesessieSignaleert aan de aanroepende context dat alle actieve sessies van het account beëindigd moeten zijn.De gebruiker kan niet doorgaan met een bestaande OefenHub-sessie.Er is geen aparte OefenHub-sessietabel.

8. Alternatieve en exceptionele processtromen

IDVanaf stapSituatieSysteemgedragPopup / meldingDatamutatie
ALT-0012De triggercontext verwijst niet naar precies één intern account.Backend blokkeert de verwerking en logt de fout.Niet van toepassing binnen deze systeemusecase.Geen domeinmutatie; AccountAnonymizationFailed wordt technisch gelogd.
ALT-0023Het account bestaat niet meer als intern Users-record.Backend beschouwt de verwerking als ongeldig en rondt niet af.Niet van toepassing.Geen domeinmutatie behalve technische logging.
ALT-0033Het account is al geanonimiseerd of inactief door een eerdere afgeronde verwerking.Backend voert geen tweede anonimisering uit, maar mag idempotent controleren of afhankelijke toegang al is beëindigd.Niet van toepassing.Alleen ontbrekende veilige opruimacties mogen alsnog worden uitgevoerd; dubbele logging wordt vermeden of als idempotente hercontrole gemarkeerd.
ALT-0044De verwerking kan niet transactioneel worden gestart.Backend blokkeert de anonimisering voordat persoonsgegevens of toegang worden gewijzigd.Niet van toepassing.Geen domeinmutatie; technische logging.
ALT-0056Roltoekenningen kunnen niet veilig worden beëindigd.Verwerking wordt afgebroken of teruggedraaid.Niet van toepassing.Geen half actieve anonimisering; fout wordt gelogd.
ALT-0067Een relatie kan door dataconsistentie niet gedeactiveerd worden.Verwerking wordt afgebroken of de relatieactie wordt in een compensatiestap verwerkt voordat het account als afgerond geanonimiseerd geldt.Niet van toepassing.Geen afgeronde accountanonimisering zolang actieve relaties niet veilig zijn verwerkt.
ALT-0078Een uitnodiging is inmiddels geaccepteerd of verlopen.Backend verwerkt de actuele status en activeert niets opnieuw.Niet van toepassing.Afgehandelde uitnodigingen blijven historisch; alleen nog openstaande uitnodigingen worden ongeldig gemaakt.
ALT-0089Account is eigenaar van een niveau met meerdere collaborators maar er is geen geldige opvolger aangeleverd.Verwerking wordt geblokkeerd en teruggegeven aan de aanroepende usecase.Aanroepende usecase bepaalt de gebruikers- of beheerafhandeling.Geen anonimisering; AccountAnonymizationFailed of AccountAnonymizationBlocked wordt technisch vastgelegd.
ALT-0099Account is eigenaar van een niveau zonder actieve collaborator.Backend maakt het niveau historisch/inactief volgens de accountverwijderingsregel.Niet van toepassing.Levels en relevante zichtbaarheid/toegangsrecords worden bijgewerkt.
ALT-0109Account is eigenaar van een niveau met precies één actieve collaborator.Backend draagt eigenaarschap automatisch over aan die collaborator.Niet van toepassing.Levels.OwnerUserId wordt bijgewerkt; historyregel wordt vastgelegd.
ALT-01112Account is actieve beheerder op open tickets.Backend beëindigt de actieve beheerderkoppeling voor dit account en laat de melding opvolgbaar voor overige beheerders.Niet van toepassing.TicketAssignments wordt beëindigd; TicketHistory wordt aangevuld.
ALT-01212Account is melder van een open ticket.Backend behoudt het ticket historisch en maakt persoonsgegevens geanonimiseerd zichtbaar; gebruikersacties vanuit dit account zijn niet meer mogelijk.Niet van toepassing.Ticket blijft bestaan; zichtbare identiteit komt uit geanonimiseerd account.
ALT-01313Een open oefenrun is onderdeel van een actieve live-meekijksessie.Backend beëindigt eerst de live-meekijkcontext en maakt de run daarna niet-hervatbaar.Niet van toepassing.LiveViewAudit.EndedAtUtc en runcontext worden bijgewerkt.
ALT-01416De geanonimiseerde e-mail of systeemcode botst met bestaande data.Backend genereert een nieuwe systeemcode en valideert opnieuw.Niet van toepassing.Geen definitieve gebruikersmutatie totdat unieke waarden beschikbaar zijn.
ALT-01518Accountlogkanaal is niet beschikbaar voor verplichte lifecyclelogging.Backend rondt de anonimisering niet af zolang verplichte logging niet mogelijk is.Niet van toepassing.Transactie wordt afgebroken of teruggedraaid; fout wordt technisch gelogd via beschikbaar fallbackkanaal.
ALT-01619Afronding faalt na gedeeltelijke mutaties.Backend voert rollback of compensatie uit volgens de transactionele workflow en markeert de verwerking niet als voltooid.Niet van toepassing.Geen reguliere toegang voor half-geanonimiseerd account; fout wordt herleidbaar vastgelegd.

9. Business rules

IDRegel
BR-001Accountanonimisering mag alleen starten na een definitieve en geautoriseerde verwijdertrigger.
BR-002De anonimiseerflow verwerkt altijd precies één intern Users-record.
BR-003OefenHub anonimiseert alleen het interne applicatieaccount en beheert geen identity-provideraccount of credentials.
BR-004Wachtwoorden, tokens, secrets en identity-providercredentials mogen nooit in accountlogging of domeinhistorie worden opgeslagen.
BR-005Zichtbare persoonsgegevens worden vervangen door de vastgestelde geanonimiseerde waarden: FirstName = Anoniem, MiddleName = #, LastName = <systeemcode> en Email = anoniem.<code>@verwijderd.acc.
BR-006De systeemwaarde # in MiddleName is gereserveerd voor systeemgebruik en mag niet door reguliere gebruikersinvoer ontstaan.
BR-007Na anonimisering staat Users.IsActive = false en mag het account geen reguliere OefenHub-toegang meer krijgen.
BR-008De interne externe-identiteitskoppeling of een gelijkwaardige blokkeerreferentie moet voorkomen dat dezelfde externe identiteit stilzwijgend opnieuw als regulier nieuw OefenHub-account wordt geprovisioneerd.
BR-009Actieve UserRoles van het account mogen na anonimisering geen frontendcontext, autorisatie of beheeractie meer opleveren.
BR-010Actieve relaties van of naar het account worden administratief beëindigd; relationele historie wordt niet hard verwijderd wanneer auditbaarheid nodig is.
BR-011Openstaande relatie-uitnodigingen van of naar het account worden niet langer accepteerbaar en worden niet opnieuw geactiveerd door latere login of provisioning.
BR-012Systeemberichten worden niet hard verwijderd als algemene accountopruiming; zij verliezen alleen bruikbaarheid voor het verwijderde account en blijven voor andere domeinverwijzingen volgens de berichtregels bestaan.
BR-013Privéberichtinhoud en threadhistorie worden niet generiek verwijderd voor andere deelnemers.
BR-014Mailboxzichtbaarheid en deelname van het verwijderde account worden beëindigd volgens participantgebonden berichtregels.
BR-015Niveauautorisaties en leerling-/docenttoegang die afhankelijk zijn van het account worden beëindigd of niet langer toepasbaar gemaakt.
BR-016Een niveau mag na verwijdering van de eigenaar geen onbepaalde actieve eigenaar houden.
BR-017Bij nul actieve collaborators wordt een niveau historisch/inactief gemaakt volgens de verwijderregel.
BR-018Bij precies één actieve collaborator wordt eigenaarschap automatisch aan die collaborator overgedragen.
BR-019Bij meerdere actieve collaborators moet de aanroepende usecase een geldige opvolger hebben aangeleverd voordat anonimisering definitief wordt uitgevoerd.
BR-020Open oefenruns van het verwijderde account blijven administratief niet-afgerond maar mogen niet hervatbaar zijn en mogen niet in normale geschiedenis- of statistiekweergaven verschijnen.
BR-021Afgeronde oefenruns blijven historisch raadpleegbaar onder geanonimiseerde identiteit wanneer zij functioneel of administratief nodig blijven.
BR-022Live-meekijksessies waarbij het account betrokken is worden beëindigd; auditinformatie blijft historisch beschikbaar onder geanonimiseerde identiteit.
BR-023Open meldingen blijven opvolgbaar voor bevoegde gebruikers, maar persoonsgegevens van het verwijderde account worden niet meer getoond.
BR-024Accountanonimisering moet transactioneel of via een gecontroleerde workflow worden bewaakt zodat geen bruikbare half-geanonimiseerde accounttoestand ontstaat.
BR-025Verplichte account lifecycle-logging moet slagen voordat de anonimisering als afgerond wordt beschouwd.
BR-026Deze systeemusecase introduceert geen aparte sessietabel, accountstatus-tabel of verwijderaanvraagtabel.
BR-027Seeddata, importscripts en technische implementatiecode vallen buiten deze usecase.

10. Datavalidatie

Veld / objectValidatie
VerwijdertriggerMoet afkomstig zijn uit een geautoriseerde aanroepende usecase en moet definitief zijn.
Users.IdMoet precies één bestaand intern account aanwijzen.
ActorcontextMoet herleidbaar zijn voor accountlogging, maar bepaalt niet zelfstandig het te anonimiseren account.
Users.ExternalIdMoet zodanig behouden of vervangen worden door een veilige blokkeerreferentie dat ongewenste reprovisioning voor dezelfde externe identiteit wordt voorkomen.
Geanonimiseerde systeemcodeMoet kort, niet-voorspelbaar, niet-persoonsherleidbaar en voldoende uniek zijn.
Geanonimiseerd e-mailadresMoet voldoen aan anoniem.<code>@verwijderd.acc en mag niet botsen met bestaande actieve accountidentiteit.
MiddleNameDe systeemwaarde # mag alleen door deze of een vergelijkbare systeemflow worden gezet.
Users.IsActiveMoet na succesvolle verwerking false zijn.
UserRolesActieve roltoekenningen van het account mogen na verwerking geen actieve autorisatie meer opleveren.
RelatiesAlleen actieve relaties van of naar het account worden gedeactiveerd; inactieve relaties blijven historisch ongewijzigd.
Relatie-uitnodigingenAlleen uitnodigingen die nog openstaand of functioneel bruikbaar zijn worden ongeldig gemaakt; afgehandelde uitnodigingen worden niet heropend.
Niveau-opvolgerMoet een actieve collaborator zijn van het betreffende niveau.
Niveau zonder opvolgerMag niet actief met verwijderde eigenaar blijven bestaan.
NiveauautorisatiesToegang afhankelijk van het verwijderde account mag na verwerking niet meer autoriseren.
PrivéberichtdeelnamesDe verwijderde gebruiker mag geen actieve mailboxzichtbaarheid of antwoordmogelijkheid behouden.
TicketsTickets mogen niet naar persoonsgegevens van het verwijderde account renderen, maar blijven historisch en beheersmatig opvolgbaar.
Open oefenrunsMogen niet meer hervatbaar zijn en mogen niet in normale geschiedenis- of statistiekweergaven verschijnen.
Afgeronde oefenrunsMogen niet worden gekoppeld aan zichtbare persoonsgegevens van de verwijderde gebruiker.
AccountlogMoet oude en nieuwe zichtbare identiteit afgeschermd kunnen vastleggen zonder credentials of tokens.

11. Datamutaties en events

StapTypeEntiteit / eventMutatie
1InputVerwijdertriggerOntvangt Users.Id, actorcontext en eventuele opvolgerkeuzes uit de aanroepende usecase.
2ReadUsersValideert dat precies één intern account wordt verwerkt.
3ReadUsers, UserRoles, UserSettingsLaadt de actuele account-, rol- en instellingencontext.
4TechnischTransactie / workflowStart gecontroleerde transactionele verwerking.
5Technisch eventAccountAnonymizationStartedLegt de start van de anonimiseerflow vast.
6UpdateUserRolesDeactiveert of beëindigt actieve roltoekenningen voor reguliere autorisatie.
6Technisch eventAccountAccessRevokedLegt vast dat applicatietoegang wordt ingetrokken.
7UpdateUserRelationshipsZet actieve relaties van of naar het account op inactief.
7CreateRelationshipEventsLegt relatiebeëindiging door accountanonimisering vast.
7Technisch eventAccountRelationshipsDeactivatedLegt vast dat actieve relaties zijn beëindigd.
8UpdateRelationshipInvitationsMaakt openstaande uitnodigingen door of naar het account niet langer accepteerbaar.
8Technisch eventAccountInvitationsInvalidatedLegt vast dat open uitnodigingen zijn geneutraliseerd.
9UpdateLevelsDraagt eigenaarschap over of maakt het niveau historisch/inactief.
9UpdateLevelCollaboratorsBeëindigt actieve collaboratorcontext van het verwijderde account waar nodig.
9CreateNiveauhistorie / accountlogLegt eigendomsoverdracht of historisch/inactief maken vast.
10UpdateLevelAuthorizationsBeëindigt leerling- of docenttoegang die afhankelijk is van het account.
10Technisch eventAccountTeachingAccessCleanedLegt vast dat onderwijsgerelateerde toegang is opgeruimd.
11UpdatePrivateMessageThreadParticipantsBeëindigt mailboxzichtbaarheid en actieve deelname van het verwijderde account.
11Technisch eventAccountMessagesDetachedFromActiveUseLegt vast dat berichtcontext is losgekoppeld van actief gebruik.
12UpdateTicketAssignmentsBeëindigt actieve beheerderskoppelingen van het verwijderde account.
12UpdateTickets / ticketcontextZorgt dat open tickets opvolgbaar blijven zonder persoonsgegevens van het account te tonen.
12CreateTicketHistoryLegt relevante beëindiging van beheercontext of geanonimiseerde meldercontext vast.
12Technisch eventAccountTicketsDetachedFromActiveUseLegt vast dat meldingencontext is losgekoppeld van actief gebruik.
13UpdateExerciseRunsMaakt open runs niet-hervatbaar en sluit ze uit van normale geschiedenis-/statistiekweergaven.
13Technisch eventAccountExerciseRunsDetachedFromActiveUseLegt vast dat open oefenruns niet meer actief bruikbaar zijn.
14UpdateSharedExercisesNeutraliseert open gedeelde-oefeningafhankelijkheden van of naar het account waar nodig.
15UpdateLiveViewAuditVult EndedAtUtc voor actieve live-meekijksessies waarbij het account betrokken is.
16UpdateUsersVervangt zichtbare persoonsgegevens en zet IsActive = false.
16Technisch eventAccountIdentityAnonymizedLegt vast dat zichtbare identiteit is geanonimiseerd.
17UpdateUserSettingsMaakt instellingen niet langer actief toepasbaar in reguliere gebruikersflows of laat ze alleen historisch gekoppeld.
18LogAccountlogkanaalLegt oude en nieuwe identiteit afgeschermd vast volgens accountloggerregels.
19Technisch eventAccountAnonymizationCompletedLegt succesvolle afronding vast.
20TechnischApplicatiesessieSignaleert sessiebeëindiging voor alle actieve applicatiesessies van het account.
ALT-001 t/m ALT-016Technisch eventAccountAnonymizationFailed / AccountAnonymizationBlockedLegt geblokkeerde of mislukte verwerking vast zonder afgeronde anonimisering te claimen.

12. Geen datamutaties

EntiteitReden
Identity-provideraccountDe externe identity provider blijft bronhouder voor authenticatie, registratie, wachtwoorden, sessies en e-mailadres als authenticatiegegeven.
Wachtwoorden / credentialsOefenHub bewaart, controleert of wijzigt geen wachtwoorden of credentialgegevens.
Identity-providerclaimsClaims worden niet aangepast door interne accountanonimisering.
RolesDe rolcatalogus verandert niet door het anonimiseren van één account.
ProfileAvatarsDe goedgekeurde avatarset wordt niet gewijzigd.
PrivateMessagesBerichtinhoud wordt niet generiek hard verwijderd; deelnemerszichtbaarheid wordt participantgebonden verwerkt.
SystemMessagesSysteemberichten worden niet generiek hard verwijderd; actieve bruikbaarheid voor het verwijderde account vervalt.
Afgeronde ExerciseRunsAfgeronde runs blijven historisch beschikbaar onder geanonimiseerde identiteit wanneer zij functioneel of administratief nodig blijven.
Audit- en historyrecordsBestaande historie wordt niet hard verwijderd wanneer herleidbaarheid nodig blijft.
ExerciseModules, Exercises, categorieën en niveaucatalogiAccountanonimisering wijzigt geen technische modules, oefenconfiguraties of centrale catalogusdefinities.
SiteNotificationsAccountanonimisering maakt, wijzigt of sluit geen systeemnotificaties.
PopupDetails / popupregisterDeze systeemusecase gebruikt geen eigen popupdefinities.
Nieuwe accountstatus-entiteitDe lifecycle gebruikt bestaande accountvelden, domeinmutaties en logging; er komt geen aparte accountstatus- of verwijderaanvraagtabel.
Nieuwe sessietabelSessiebeëindiging is technische applicatielogica; er wordt geen OefenHub-sessietabel geïntroduceerd.

13. State diagram

Er is geen zelfstandig persistent accountstatusmodel naast Users.IsActive, geanonimiseerde identiteit en logging. Het onderstaande diagram toont daarom de afgeleide lifecycle van het interne account tijdens deze systeemverwerking.

14. Decision flow

15. Data lifecycle diagram

16. Sequence diagrammen

16.1 Hoofdroute accountanonimisering

16.2 Blokkade bij ontbrekende opvolger

17. Popupverwijzingen

PopupKeyMomentVariantDoel
Niet van toepassingDeze usecase toont geen eigen popup.Niet van toepassingBevestigings-, blokkade- en foutmeldingen horen bij de aanroepende gebruikers- of beheerusecase.

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

DoeldocumentAfleiding
Functioneel OntwerpBeschrijf accountanonimisering als interne vervolgverwerking na bevestigde accountverwijdering, gescheiden van de gebruikersdialoog.
Functioneel OntwerpBeschrijft dat OefenHub het interne applicatieaccount anonimiseert, reguliere toegang beëindigt en afhankelijke toegang opruimt, zonder het identity-provideraccount te beheren.
Functioneel OntwerpBeschrijft dat bestaande geschiedenis en auditinformatie onder geanonimiseerde identiteit beschikbaar blijven wanneer dat functioneel of administratief noodzakelijk is.
Functioneel OntwerpBeschrijf de gevolgen voor relaties, uitnodigingen, niveauautorisaties, docentniveau-eigenaarschap, privéberichten, meldingen, oefenruns, gedeelde oefeningen en live-meekijken.
Technisch Ontwerp: identiteit, authenticatie en rolcontext, privacy en anonimisering, relatiebeheerBeschrijft de transactionele workflow voor accountanonimisering uit, inclusief rollback- of compensatiegedrag bij fouten.
Technisch Ontwerp: identiteit, authenticatie en rolcontext, privacy en anonimisering, relatiebeheerBeschrijft de mutatieregels vast voor Users, UserRoles, UserSettings, UserRelationships, RelationshipInvitations, LevelAuthorizations, Levels, LevelCollaborators, PrivateMessageThreadParticipants, Tickets, ExerciseRuns, SharedExercises en LiveViewAudit.
Technisch Ontwerp: identiteit, authenticatie en rolcontext, privacy en anonimisering, relatiebeheerBeschrijft hoe ExternalId of een veilige blokkeerreferentie ongewenste reprovisioning voor dezelfde externe identiteit voorkomt.
Technisch Ontwerp: identiteit, authenticatie en rolcontext, privacy en anonimisering, relatiebeheerBeschrijft dat account lifecycle-logging oude en nieuwe zichtbare identiteit afgeschermd vastlegt zonder credentials, tokens of secrets.
Software Requirements SpecificationBevat requirements voor interne anonimisering, toegangsbeëindiging, afhankelijkheidsopruiming, historische raadpleegbaarheid, transactionele veiligheid en logging.
Database-informatieBeschrijft de relevante datamodelafspraken voor identiteit/autorisatie, relatiebeheer, docentstructuur, communicatie, meldingen, oefenruns en audit/technische uitgangspunten.
OntwerpbronnenBevat business rules, autorisatiematrix, domeinobjecten, command-register, event-register en matrices voor accountanonimisering en afhankelijke toegang opruimen.
Documentatie-impactWijzigingen in deze flow worden beoordeeld op impact voor Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification, database-informatie en ontwerpbronnen.

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-005-001SRS-AUTH-001
SRS-ACC-002
SRS-ACC-004
SRS-NFR-PRV-001
AC-AUTH-001
AC-ACC-002
AC-ACC-004
AC-NFR-PRV-001
Na een definitieve en geautoriseerde verwijdertrigger het interne OefenHub-account kunnen anonimiseren
REQ-UC-GEN-ACC-005-002SRS-ACC-002
SRS-ACC-004
SRS-NFR-PRV-001
AC-ACC-002
AC-ACC-004
AC-NFR-PRV-001
Accountanonimisering uitsluitend uitvoeren op precies één intern Users-record
REQ-UC-GEN-ACC-005-003SRS-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 vervangen door de vastgestelde geanonimiseerde waarden
REQ-UC-GEN-ACC-005-004SRS-AUTH-001
SRS-ACC-002
SRS-ACC-004
SRS-ACC-006
SRS-NFR-PRV-001
AC-AUTH-001
AC-ACC-002
AC-ACC-004
AC-ACC-006
AC-NFR-PRV-001
Na anonimisering reguliere OefenHub-toegang blokkeren door het account inactief te maken
REQ-UC-GEN-ACC-005-005SRS-ACC-001
AC-ACC-001
Voorkomen dat dezelfde externe identiteit stilzwijgend opnieuw als regulier nieuw OefenHub-account wordt geprovisioneerd
REQ-UC-GEN-ACC-005-006SRS-ACC-002
SRS-NFR-SEC-001
SRS-NFR-PRV-001
AC-ACC-002
AC-NFR-SEC-001
AC-NFR-PRV-001
Geen identity-provideraccount, wachtwoord, credential of identity-providerclaim wijzigen binnen deze usecase
REQ-UC-GEN-ACC-005-007SRS-AUTH-001
SRS-ACC-002
AC-AUTH-001
AC-ACC-002
Actieve roltoekenningen van het account beëindigen of niet langer autoriserend laten zijn
REQ-UC-GEN-ACC-005-008SRS-ACC-002
SRS-REL-003
SRS-REL-006
SRS-NFR-AUD-001
AC-ACC-002
AC-REL-003
AC-REL-006
AC-NFR-AUD-001
Actieve relaties van of naar het account administratief beëindigen met behoud van auditbare relatiehistorie
REQ-UC-GEN-ACC-005-009SRS-ACC-002
SRS-REL-002
AC-ACC-002
AC-REL-002
Openstaande relatie-uitnodigingen van of naar het account niet langer accepteerbaar maken
REQ-UC-GEN-ACC-005-010SRS-AUTH-001
SRS-ACC-002
SRS-LRN-009
SRS-TCH-006
SRS-GUA-001
AC-AUTH-001
AC-ACC-002
AC-LRN-009
AC-TCH-006
AC-GUA-001
Afhankelijke leerling-, docent-, ouder-/voogd- en collaborator-toegang beëindigen of overdragen volgens de geldende domeinregels
REQ-UC-GEN-ACC-005-011SRS-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
Niveau-eigenaarschap van een verwijderde docent overdragen aan een geldige collaborator of het niveau historisch/inactief maken wanneer geen opvolger bestaat
REQ-UC-GEN-ACC-005-012SRS-ACC-002
SRS-ACC-004
SRS-MSG-003
AC-ACC-002
AC-ACC-004
AC-MSG-003
Mailboxzichtbaarheid en actieve privéberichtdeelname van het verwijderde account beëindigen zonder threadinhoud voor andere deelnemers generiek te verwijderen
REQ-UC-GEN-ACC-005-013SRS-ACC-002
SRS-ACC-004
SRS-TIC-002
SRS-NFR-PRV-001
AC-ACC-002
AC-ACC-004
AC-TIC-002
AC-NFR-PRV-001
Open ticket- en meldingencontext zodanig verwerken dat opvolging mogelijk blijft zonder persoonsgegevens van het verwijderde account te tonen
REQ-UC-GEN-ACC-005-014SRS-ACC-002
SRS-LRN-002
SRS-LRN-007
SRS-NFR-AUD-001
AC-ACC-002
AC-LRN-002
AC-LRN-007
AC-NFR-AUD-001
Open oefenruns van het account niet-hervatbaar maken en uitsluiten van normale geschiedenis- en statistiekweergaven
REQ-UC-GEN-ACC-005-015SRS-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 en auditrecords waar nodig behouden onder geanonimiseerde identiteit
REQ-UC-GEN-ACC-005-016SRS-ACC-002
SRS-LIVE-003
SRS-NFR-AUD-001
AC-ACC-002
AC-LIVE-003
AC-NFR-AUD-001
Actieve live-meekijksessies waarbij het account betrokken is beëindigen en auditinformatie historisch behouden
REQ-UC-GEN-ACC-005-017SRS-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
Accountanonimisering transactioneel of via een gecontroleerde workflow bewaken om half-geanonimiseerde actieve accounttoestanden te voorkomen
REQ-UC-GEN-ACC-005-018SRS-ACC-002
SRS-ACC-004
SRS-NFR-PRV-001
SRS-NFR-AUD-001
SRS-NFR-LOG-001
AC-ACC-002
AC-ACC-004
AC-NFR-PRV-001
AC-NFR-AUD-001
AC-NFR-LOG-001
Verplichte account lifecycle-logging vastleggen voordat anonimisering als afgerond geldt
REQ-UC-GEN-ACC-005-019SRS-ACC-002
SRS-NFR-SEC-001
SRS-NFR-PRV-001
SRS-NFR-LOG-001
AC-ACC-002
AC-NFR-SEC-001
AC-NFR-PRV-001
AC-NFR-LOG-001
In account lifecycle-logging geen wachtwoorden, tokens, secrets of credentialgegevens opslaan
REQ-UC-GEN-ACC-005-020SRS-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
Fouten of blokkades tijdens anonimisering veilig loggen zonder afgeronde anonimisering te claimen wanneer de verwerking niet consistent is afgerond