UC-BEH-ACC-005 — Account tijdelijk uitschakelen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-ACC-005 |
| Naam | Account tijdelijk uitschakelen |
| Domein | Beheerder / Accountbeheer |
| Primaire actor | Beheerder |
| Secundaire actor(en) | Frontend, backend, database, autorisatiecomponent, identity-providerkoppeling, accountlogkanaal |
| Rolcontext | Actieve beheerdercontext; server-side bepaald vanuit de ingelogde gebruiker |
| Betrokken schermen | Accounts beheren > Accountdetail > Lifecycle |
| Gerelateerde usecases | UC-BEH-ACC-001, UC-BEH-ACC-002, UC-BEH-ACC-003, UC-BEH-ACC-004, UC-BEH-ACC-006, UC-BEH-ACC-007, UC-BEH-ACC-008, UC-BEH-ACC-009, UC-BEH-ACC-010, UC-GEN-ACC-001, UC-GEN-ACC-002, UC-GEN-ACC-005 |
| Primaire entiteiten | Users, Roles, UserRoles, UserSettings, ProfileAvatars, accountlogkanaal |
| Secundaire entiteiten / events | UserRelationships, RelationshipInvitations, TeacherLevels, TeacherLevelAuthorizations, LevelCollaborators, ExerciseRuns, LiveViewAudit, SystemMessages, PrivateMessageThreads, Tickets |
| Gerelateerde popups | POP-BEH-ACC-DEACTIVATE-CONFIRM |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
De usecase beschrijft hoe een beheerder een intern OefenHub-account tijdelijk uitschakelt. Uitschakelen zet Users.IsActive op false en blokkeert reguliere OefenHub-toegang, maar is geen anonimisering en geen verwijdering van het identity-provideraccount.
De actie vereist een expliciete reden en wordt accountlogmatig vastgelegd. Bestaande historische gegevens blijven behouden. Afhankelijk van actieve realtime-contexten worden lokale applicatiecontexten en SignalR-subscriptions beëindigd of ongeldig gemaakt.
Deactiveren is bedoeld als omkeerbare beheermaatregel. Structurele verwijdering en anonimisering verlopen via UC-BEH-ACC-007 of de generieke selfservice-accountverwijdering.
Uitgangspunten
- Users.IsActive = false blokkeert reguliere OefenHub-toegang.
- De identity provider blijft buiten deze actie.
- Deactiveren is omkeerbaar via heractiveren.
- Een reden is verplicht.
- Actieve applicatiecontexten worden veilig beëindigd of ongeldig gemaakt.
3. Scope
Deze usecase beschrijft:
- Tijdelijk uitschakelen van één intern account.
- Vastleggen van reden in accountlogkanaal.
- Blokkeren van toekomstige applicatiesessies via Users.IsActive = false.
- Ongeldig maken of beëindigen van actieve OefenHub-frontendcontext waar mogelijk.
- Afhandelen van open LiveViewAudit wanneer de gedeactiveerde gebruiker meekijkt.
- Behouden van historie, relaties en resultaten als historische data.
Deze usecase beschrijft niet:
- Wachtwoorden, tokens, secrets, identity-provider-sessies of credentialstatus beheren.
- Een Keycloak- of identity-provideraccount rechtstreeks wijzigen of verwijderen.
- Vrij relatiebeheer tussen gebruikers uitvoeren; relatieflows blijven bronhoudend in het relatiedomein.
- Profielwijzigingen als selfservice-gebruikersflow dupliceren; eigen profielbeheer blijft bronhoudend in generiek/profiel.
- Popupteksten, knopteksten of inputlabels specificeren; usecases verwijzen uitsluitend naar PopupKey.
- Persoonsgegevens anonimiseren; dit hoort bij UC-BEH-ACC-007.
- Account hard verwijderen.
- Relaties en afhankelijkheden breed opschonen alsof het account verwijderd wordt.
- Identity-provideraccount deactiveren of verwijderen.
3.1 Afbakening met aangrenzende domeinen
| Onderdeel | Afbakening |
|---|---|
| Generiek / Account | Login, provisioning, logout en selfservice-accountverwijdering blijven bronhoudend in het generieke accountdomein. |
| Generiek / Profiel en voorkeuren | Eigen profiel- en voorkeurenbeheer blijft gebruikergericht; accountbeheer bevat alleen beheerdercorrecties en uitzonderingsacties. |
| Generiek / Relaties | Relatie-uitnodigingen, acceptatie en normale ontkoppeling blijven in het relatiedomein; accountbeheer kan wel afhankelijke toegang beëindigen bij lifecycle-acties. |
| Beheerder / Docentondersteuning | Docentstructuur, leerlingtoegang en collaborators worden daar supportmatig beheerd; accountbeheer ziet accountbrede identiteit, rollen en lifecycle. |
| Identity provider | Authenticatie, wachtwoorden, verificatie, tokens en credentials blijven buiten OefenHub-accountbeheer. |
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is succesvol ingelogd in OefenHub. |
| PRE-002 | De backend heeft server-side vastgesteld dat de gebruiker een actieve beheerderrol heeft. |
| PRE-003 | De beheerder bevindt zich binnen Accounts beheren of een onderliggende accountbeheerroute. |
| PRE-004 | Clientstate, routeparameters of verborgen formuliervelden bepalen nooit welk account gewijzigd mag worden. |
| PRE-005 | De identity provider blijft bronhouder voor authenticatie, wachtwoorden, tokens, sessies en credential lifecycle. |
| PRE-006 | De beheerder heeft accountdetail geopend. |
| PRE-007 | Het doelaccount bestaat en is nog actief. |
| PRE-008 | De beheerder heeft de gevolgen kunnen bekijken. |
| PRE-009 | Er is vastgesteld dat de actie niet het laatste actieve beheerdersaccount uitschakelt. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Users.IsActive van het doelaccount is false. |
| POST-002 | De reden en actor zijn accountlogmatig vastgelegd. |
| POST-003 | Reguliere OefenHub-toegang voor het account is geblokkeerd. |
| POST-004 | Actieve OefenHub-contexten zijn beëindigd of worden bij volgende servercall geweigerd. |
| POST-005 | Identity-providercredentials zijn ongewijzigd. |
6. Trigger
De usecase start wanneer de beheerder in accountdetail de actie Account uitschakelen kiest.
7. Normale processtroom
| Stap | Actor | Component / context | Actie | Resultaat | Data / controle |
|---|---|---|---|---|---|
| 1 | Beheerder | Accountdetail | Kiest Account uitschakelen. | De frontend opent de bevestigingsflow. | Users.Id. |
| 2 | Backend | Autorisatiecomponent | Controleert beheerdercontext. | Alleen beheerder mag deactiveren. | Server-side controle. |
| 3 | Backend | AccountService | Laadt doelaccount en actuele status. | Actief account wordt vastgesteld. | Users.IsActive. |
| 4 | Backend | AccountService | Controleert beheerderbescherming en afhankelijkheden. | Risicovolle blokkades worden bepaald. | UserRoles, open context. |
| 5 | Frontend | Popupcomponent | Vraagt bevestiging en reden. | Reden is verplicht. | POP-BEH-ACC-DEACTIVATE-CONFIRM. |
| 6 | Beheerder | Popupcomponent | Bevestigt met reden. | De backend ontvangt reden. | Bevestiging. |
| 7 | Backend | AccountService | Zet Users.IsActive op false. | Reguliere toegang wordt geblokkeerd. | Users. |
| 8 | Backend | RealtimeService | Beëindigt of invalideert actieve OefenHub-contexten. | SignalR-subscriptions en live meekijkcontexten worden veilig afgesloten. | Realtime context en LiveViewAudit. |
| 9 | Backend | Accountlog | Legt deactivering vast. | Actor, doelaccount, reden, oude en nieuwe status zijn auditbaar. | Accountlogkanaal. |
| 10 | Frontend | Accountdetail | Toont gedeactiveerde status. | Vervolgactie Heractiveren wordt beschikbaar indien toegestaan. | Nieuwe status. |
8. Alternatieve en exceptionele processtromen
| Stap | Situatie | Afhandeling | PopupKey | Datagevolg |
|---|---|---|---|---|
| 2 | Actor is geen beheerder. | De actie wordt geweigerd. | Niet van toepassing. | Geen. |
| 3 | Account is al gedeactiveerd. | De actie wordt niet opnieuw uitgevoerd; detail wordt vernieuwd. | Niet van toepassing. | Geen. |
| 4 | Doelaccount is laatste actieve beheerder. | Deactiveren wordt geblokkeerd. | Niet van toepassing. | Geen. |
| 5 | Reden ontbreekt. | Bevestigen blijft onmogelijk. | POP-BEH-ACC-DEACTIVATE-CONFIRM. | Geen. |
| 6 | Beheerder annuleert. | Er wordt niets opgeslagen. | POP-BEH-ACC-DEACTIVATE-CONFIRM. | Geen. |
| 8 | Realtime-context is niet volledig bereikbaar. | Users.IsActive blijft leidend; open contexten worden bij volgende serverinteractie geweigerd. | Niet van toepassing. | Users.IsActive = false blijft staan. |
9. Business rules
| ID | Business rule |
|---|---|
| BR-001 | Deactiveren zet Users.IsActive op false en is geen hard delete. |
| BR-002 | Een gedeactiveerd account kan niet regulier in OefenHub gebruiken, ook niet na geldige identity-providerlogin. |
| BR-003 | Deactiveren vereist een reden. |
| BR-004 | Het identity-provideraccount wordt niet gewijzigd. |
| BR-005 | Het laatste actieve beheerdersaccount mag niet gedeactiveerd worden. |
| BR-006 | Historische data blijft bewaard en zichtbaar binnen geldende autorisaties. |
| BR-007 | Open LiveViewAudit-records worden beëindigd wanneer de gedeactiveerde gebruiker live meekijkt. |
10. Datavalidatie
| ID | Validatie |
|---|---|
| VAL-001 | Doelaccount moet bestaan en actief zijn. |
| VAL-002 | Actor moet op moment van opslaan beheerder zijn. |
| VAL-003 | Reden is verplicht. |
| VAL-004 | Laatste-beheerdercontrole is verplicht bij accounts met Admin-rol. |
| VAL-005 | Users.IsActive wordt server-side gewijzigd en niet uit clientpayload overgenomen. |
| VAL-006 | Concurrente statuswijziging wordt vlak voor opslaan opnieuw gecontroleerd. |
11. Datamutaties en events
| Onderdeel | Mutatie / event |
|---|---|
| Users | IsActive wordt false en UpdatedAtUtc wordt bijgewerkt. |
| LiveViewAudit | Open meekijkrecords van de gedeactiveerde gebruiker krijgen waar van toepassing een eindmoment. |
| Accountlogkanaal | Deactivering wordt met reden vastgelegd. |
12. Geen datamutaties
| Object / gegeven | Niet wijzigen |
|---|---|
| Identity provider | Geen credential- of accountstatuswijziging. |
| UserRoles | Roltoekenningen blijven historisch en actief geregistreerd tenzij aparte rolflow volgt. |
| UserSettings | Instellingen blijven bewaard. |
| Relaties en autorisaties | Geen brede cleanup zoals bij anonimisering. |
| ExerciseRuns en berichten | Historische inhoud blijft bestaan. |
13. State diagram
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Gebruik |
|---|---|
| POP-BEH-ACC-DEACTIVATE-CONFIRM | Bevestiging met verplichte reden voor tijdelijk uitschakelen. |
Popupinhoud, knopteksten, themakeuzes en eventuele inputlabels blijven bronhoudend in het centrale popupregister en popup-themes.
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Document | Afleiding |
|---|---|
| Functioneel Ontwerp | Beheerder kan accounts tijdelijk uitschakelen als omkeerbare lifecycleactie. |
| Technisch Ontwerp | Technisch Ontwerp: identiteit en accountlifecycle, autorisatie, logging en foutafhandeling en privacy en anonimisering beschrijven de technische uitwerking. Users.IsActive blokkeert applicatietoegang; actieve OefenHub-contexten worden veilig beëindigd of geweigerd. |
| Software Requirements Specification | SRS moet redenplicht, laatste-beheerderbescherming en identity-providerafbakening vastleggen. |
| Database | Wijzigt Users.IsActive; schrijft accountlog en eventueel LiveViewAudit-eindmoment. |
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-afleiding | Dekt | Usecasecontext |
|---|---|---|
UC-BEH-ACC-005-REQ-001 | SRS-ACC-002 SRS-ADM-002 SRS-ADM-005 SRS-ADM-001 AC-ACC-002 AC-ADM-002 AC-ADM-005 AC-ADM-001 | Een beheerder een actief account tijdelijk kunnen laten uitschakelen |
UC-BEH-ACC-005-REQ-002 | SRS-ADM-005 SRS-ADM-001 AC-ADM-005 AC-ADM-001 | Voor uitschakelen een reden verplicht stellen |
UC-BEH-ACC-005-REQ-003 | SRS-ADM-001 AC-ADM-001 | Users.IsActive op false zetten bij deactiveren |
UC-BEH-ACC-005-REQ-004 | SRS-AUTH-001 SRS-ACC-002 SRS-ADM-002 SRS-ADM-001 AC-AUTH-001 AC-ACC-002 AC-ADM-002 AC-ADM-001 | Gedeactiveerde accounts blokkeren bij reguliere OefenHub-toegang |
UC-BEH-ACC-005-REQ-005 | SRS-ACC-002 SRS-ADM-002 SRS-ADM-001 AC-ACC-002 AC-ADM-002 AC-ADM-001 | Het laatste actieve beheerdersaccount beschermen |
UC-BEH-ACC-005-REQ-006 | SRS-ADM-001 SRS-NFR-SEC-001 AC-ADM-001 AC-NFR-SEC-001 | Actieve OefenHub-contexten veilig beëindigen of ongeldig maken |
UC-BEH-ACC-005-REQ-007 | SRS-ADM-001 SRS-NFR-SEC-001 SRS-NFR-PRV-001 SRS-ARCH-002 AC-ADM-001 AC-NFR-SEC-001 AC-NFR-PRV-001 AC-ARCH-002 | Bij deactiveren geen identity-providercredentials wijzigen |