UC-BEH-ACC-003 — Accountrollen beheren
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-ACC-003 |
| Naam | Accountrollen beheren |
| 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 > Rollen |
| Gerelateerde usecases | UC-BEH-ACC-001, UC-BEH-ACC-002, UC-BEH-ACC-004, UC-BEH-ACC-005, 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-ROLE-CHANGE-CONFIRM |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
De usecase beschrijft hoe een beheerder publieke rollen van een account beheert en actieve roltoekenningen intrekt of toevoegt binnen de combinatieregels van OefenHub.
Rolbeheer wijzigt UserRoles en niet de identity-providerclaims. De actieve frontendcontext van een gebruiker wordt bij een volgende sessie- of contextbepaling server-side opnieuw afgeleid uit de actuele roltoekenningen.
De leerlingrol heeft een bijzondere positie: een account met Leerling mag niet gecombineerd worden met Ouder/voogd, Docent, Beheerder of TestDocent. Ouder/voogd, Docent en Beheerder mogen wel gecombineerd voorkomen, mits niet in strijd met overige systeemregels.
Uitgangspunten
- Rolbeheer gebruikt Roles en UserRoles als bron.
- Rolmutaties zijn soft-auditbaar via UserRoles en accountlogkanaal.
- Niet-publieke rollen worden in UC-BEH-ACC-004 apart behandeld.
- De beheerder kan zichzelf of het laatste beheerdersaccount niet ongemerkt buitensluiten.
- Een rolmutatie wijzigt geen relaties, berichten, tickets of oefenresultaten.
3. Scope
Deze usecase beschrijft:
- Bekijken van actieve roltoekenningen.
- Toevoegen van toegestane publieke rollen.
- Intrekken van actieve roltoekenningen.
- Toepassen van rolcombinatieregels.
- Vastleggen van actor en tijdstip op UserRoles.
- Accountlogmatig vastleggen van rolmutaties.
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.
- Niet-publieke rollen zoals Admin of TestDocent toekennen of intrekken; dit hoort bij UC-BEH-ACC-004.
- Relaties, leerlingtoegang of docentcontext automatisch aanpassen buiten expliciete lifecycle-acties.
- Actieve sessies bij de identity provider beëindigen.
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 is niet geanonimiseerd. |
| PRE-008 | De lijst met actieve rollen en beschikbare rollen is server-side geladen. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Gewenste toegestane rolmutaties zijn vastgelegd in UserRoles. |
| POST-002 | Toegevoegde roltoekenningen bevatten GrantedAtUtc en GrantedByUserId. |
| POST-003 | Ingetrokken roltoekenningen bevatten RevokedAtUtc, RevokedByUserId en IsActive = false. |
| POST-004 | Er is een accountlogregel voor de rolmutatie vastgelegd. |
| POST-005 | Er zijn geen identity-providercredentials gewijzigd. |
6. Trigger
De usecase start wanneer de beheerder in accountdetail de sectie Rollen opent en een publieke rol toevoegt of intrekt.
7. Normale processtroom
| Stap | Actor | Component / context | Actie | Resultaat | Data / controle |
|---|---|---|---|---|---|
| 1 | Beheerder | Accountdetail | Opent de sectie Rollen. | De frontend vraagt actuele rolcontext op. | Users.Id. |
| 2 | Backend | Autorisatiecomponent | Controleert beheerdercontext. | Alleen beheerder mag rollen beheren. | Server-side controle. |
| 3 | Backend | RoleService | Laadt actieve UserRoles en beschikbare publieke rollen. | De beheerder ziet toegestane rolopties. | Roles.IsActive en Roles.IsPublic. |
| 4 | Beheerder | Rollenpaneel | Wijzigt rolselectie. | De frontend vraagt validatie van de gewenste mutatie. | Gewenste rolset. |
| 5 | Backend | RoleService | Valideert combinatieregels. | Ongeldige combinaties worden geblokkeerd. | Leerling exclusief. |
| 6 | Frontend | Popupcomponent | Toont bevestiging voor rolwijziging. | De beheerder bevestigt de mutatie. | POP-BEH-ACC-ROLE-CHANGE-CONFIRM. |
| 7 | Backend | RoleService | Past UserRoles transactioneel aan. | Nieuwe en ingetrokken rollen worden auditbaar opgeslagen. | UserRoles. |
| 8 | Backend | Accountlog | Legt rolmutatie vast. | Accountlifecyclelog bevat actor, doelaccount, oude en nieuwe rolset. | Afgeschermd accountlogkanaal. |
| 9 | Frontend | Accountdetail | Toont bijgewerkte rolset. | Actiebeschikbaarheid wordt opnieuw afgeleid. | Nieuwe rolcontext. |
8. Alternatieve en exceptionele processtromen
| Stap | Situatie | Afhandeling | PopupKey | Datagevolg |
|---|---|---|---|---|
| 2 | Actor is geen beheerder. | De backend weigert de mutatie. | Niet van toepassing. | Geen. |
| 4 | Doelaccount is geanonimiseerd. | Rolbeheer wordt geblokkeerd. | Niet van toepassing. | Geen. |
| 5 | Rolcombinatie bevat Leerling met andere rol. | De mutatie wordt geweigerd. | Niet van toepassing. | Geen. |
| 5 | Mutatie zou het laatste actieve beheerdersaccount verwijderen. | De mutatie wordt geblokkeerd. | Niet van toepassing. | Geen. |
| 6 | Beheerder annuleert bevestiging. | Er wordt niets opgeslagen. | POP-BEH-ACC-ROLE-CHANGE-CONFIRM. | Geen. |
| 7 | Roltoekenning is intussen gewijzigd door een andere beheerder. | De mutatie wordt geweigerd en de rolset wordt opnieuw geladen. | Niet van toepassing. | Geen. |
9. Business rules
| ID | Business rule |
|---|---|
| BR-001 | Rolmutaties worden vastgelegd in UserRoles; rollen worden niet hard uit historie verwijderd. |
| BR-002 | Leerling mag niet gecombineerd worden met Ouder/voogd, Docent, Beheerder of TestDocent. |
| BR-003 | Ouder/voogd, Docent en Beheerder mogen gecombineerd voorkomen wanneer geen leerlingrol actief is. |
| BR-004 | Niet-publieke rollen worden niet via de publieke rolbeheerroute behandeld. |
| BR-005 | Het laatste actieve beheerdersaccount mag niet zonder expliciete systeemwaarborg verdwijnen. |
| BR-006 | Rolmutatie wijzigt geen identity-providercredentials. |
| BR-007 | Actieve frontendcontext wordt bij volgende contextbepaling opnieuw server-side afgeleid. |
10. Datavalidatie
| ID | Validatie |
|---|---|
| VAL-001 | Doelaccount moet bestaan en actief of beheerbaar gedeactiveerd zijn. |
| VAL-002 | Gewenste rollen moeten bestaan in Roles en actief zijn. |
| VAL-003 | Publieke rolmutaties gebruiken alleen Roles.IsPublic = true, tenzij verwezen wordt naar UC-BEH-ACC-004. |
| VAL-004 | Actieve UserId + RoleId-combinatie moet uniek blijven. |
| VAL-005 | GrantedByUserId en RevokedByUserId verwijzen naar de uitvoerende beheerder. |
| VAL-006 | Concurrente wijziging moet worden gedetecteerd via actuele rolset of versiecontrole. |
11. Datamutaties en events
| Onderdeel | Mutatie / event |
|---|---|
| UserRoles toevoegen | Nieuwe roltoekenning met IsActive = true, GrantedAtUtc en GrantedByUserId. |
| UserRoles intrekken | Bestaande roltoekenning krijgt IsActive = false, RevokedAtUtc en RevokedByUserId. |
| Accountlogkanaal | Rolmutatie wordt met oude en nieuwe rolset vastgelegd. |
12. Geen datamutaties
| Object / gegeven | Niet wijzigen |
|---|---|
| Users | Accountidentiteit en IsActive wijzigen niet. |
| UserSettings | Geen gebruikersinstellingen wijzigen. |
| Identity provider | Geen claims, wachtwoorden, tokens of sessies wijzigen. |
| Relaties en autorisaties | Geen automatische relatie- of niveauautorisatiemutatie. |
| ExerciseRuns en geschiedenis | Geen resultaten of runs wijzigen. |
13. State diagram
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Gebruik |
|---|---|
| POP-BEH-ACC-ROLE-CHANGE-CONFIRM | Bevestiging voor het toevoegen of intrekken van een rol. |
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 | Accountbeheer ondersteunt beheerdergestuurde roltoekenning en intrekking binnen rolcombinatieregels. |
| Technisch Ontwerp | Technisch Ontwerp: identiteit en accountlifecycle, autorisatie, logging en foutafhandeling en privacy en anonimisering beschrijven de technische uitwerking. RoleService moet UserRoles transactioneel wijzigen en accountlog schrijven. |
| Software Requirements Specification | SRS moet rolcombinatieregels, laatste-beheerderbescherming en auditplicht expliciet vastleggen. |
| Database | Gebruikt Roles en UserRoles; geen wijziging aan identity-providercredentials. |
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-003-REQ-001 | SRS-ACC-002 SRS-ADM-002 SRS-ADM-001 AC-ACC-002 AC-ADM-002 AC-ADM-001 | Een beheerder publieke rollen van een account kunnen laten beheren |
UC-BEH-ACC-003-REQ-002 | SRS-AUTH-001 SRS-ADM-002 SRS-ADM-001 AC-AUTH-001 AC-ADM-002 AC-ADM-001 | Rolmutaties server-side valideren |
UC-BEH-ACC-003-REQ-003 | SRS-LRN-009 SRS-ADM-002 SRS-ADM-001 AC-LRN-009 AC-ADM-002 AC-ADM-001 | De leerlingrol exclusief houden ten opzichte van andere hoofdrollen |
UC-BEH-ACC-003-REQ-004 | SRS-ADM-002 SRS-ADM-001 SRS-NFR-AUD-001 AC-ADM-002 AC-ADM-001 AC-NFR-AUD-001 | UserRoles niet hard verwijderen maar intrekken met auditvelden |
UC-BEH-ACC-003-REQ-005 | SRS-ACC-002 SRS-ADM-002 SRS-ADM-001 SRS-NFR-AUD-001 AC-ACC-002 AC-ADM-002 AC-ADM-001 AC-NFR-AUD-001 | Rolmutaties vastleggen in een accountlogkanaal |
UC-BEH-ACC-003-REQ-006 | SRS-ACC-002 SRS-ADM-002 SRS-ADM-001 AC-ACC-002 AC-ADM-002 AC-ADM-001 | Voorkomen dat het laatste actieve beheerdersaccount ongemerkt verdwijnt |
UC-BEH-ACC-003-REQ-007 | SRS-ADM-002 SRS-ADM-001 SRS-NFR-SEC-001 SRS-NFR-PRV-001 SRS-ARCH-002 AC-ADM-002 AC-ADM-001 AC-NFR-SEC-001 AC-NFR-PRV-001 AC-ARCH-002 | Bij rolmutaties geen identity-providercredentials wijzigen |