UC-BEH-ACC-004 — Niet-publieke rol toekennen of intrekken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-ACC-004 |
| Naam | Niet-publieke rol toekennen of intrekken |
| 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-003, 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-NONPUBLIC-ROLE-CONFIRM |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
De usecase beschrijft hoe een beheerder niet-publieke rollen zoals Beheerder en TestDocent toekent of intrekt. Niet-publieke rollen hebben Roles.IsPublic = false en kunnen niet door eindgebruikers zelf gekozen worden.
De actie is zwaarder dan gewone rolmutaties, omdat zij beheer- of testtoegang kan geven. Daarom vereist de flow een expliciete bevestiging en een reden voor auditdoeleinden.
De toekenning van TestDocent geeft toegang tot testzichtbare modules waar de module- en oefencontext dat toestaat. De toekenning van Beheerder geeft beheerrechten binnen OefenHub, maar wijzigt geen identity-providercredential of extern account.
Uitgangspunten
- Niet-publieke rollen worden beheerd via Roles.IsPublic = false.
- Beheerder en TestDocent zijn voorbeelden van niet-publieke rollen.
- Een reden is verplicht voor toekenning en intrekking.
- De actie wordt apart gelogd in het accountlogkanaal.
- Laatste-beheerderbescherming is verplicht bij intrekking van Admin.
3. Scope
Deze usecase beschrijft:
- Tonen van niet-publieke rollen die administratief toekenbaar zijn.
- Toekennen van een niet-publieke rol aan een account.
- Intrekken van een niet-publieke rol.
- Vastleggen van verplichte reden.
- Toepassen van combinatieregels en laatste-beheerderbescherming.
- Accountlogmatig vastleggen van de actie.
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.
- Publieke rollen beheren; dit hoort bij UC-BEH-ACC-003.
- Technische modulebeschikbaarheid voor TestDocent wijzigen; dit hoort bij modulebeheer.
- Identity-providerclaims of groepen wijzigen.
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 niet-publieke rol bestaat in Roles en is actief. |
| PRE-009 | De beheerder heeft rechten om niet-publieke rollen te beheren. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De niet-publieke rol is toegekend of ingetrokken via UserRoles. |
| POST-002 | De reden is vastgelegd in het accountlogkanaal. |
| POST-003 | GrantedAtUtc/GrantedByUserId of RevokedAtUtc/RevokedByUserId zijn gevuld. |
| POST-004 | Laatste-beheerderbescherming is toegepast. |
| POST-005 | Er is geen identity-providercredential gewijzigd. |
6. Trigger
De usecase start wanneer de beheerder in accountdetail een niet-publieke rol selecteert voor toekenning of intrekking.
7. Normale processtroom
| Stap | Actor | Component / context | Actie | Resultaat | Data / controle |
|---|---|---|---|---|---|
| 1 | Beheerder | Rollenpaneel | Kiest niet-publieke rol toekennen of intrekken. | De frontend opent de bevestigingsflow. | Role.Code bijvoorbeeld Admin of TestDocent. |
| 2 | Backend | Autorisatiecomponent | Controleert beheerdercontext en autorisatie voor niet-publieke rollen. | Alleen bevoegde beheerder mag doorgaan. | Server-side controle. |
| 3 | Backend | RoleService | Laadt doelaccount, rol en huidige rolset. | De actuele situatie wordt vastgesteld. | Users, Roles, UserRoles. |
| 4 | Backend | RoleService | Valideert combinatieregels en laatste-beheerderbescherming. | Ongeldige acties worden geblokkeerd. | Leerling exclusief en Admin-bescherming. |
| 5 | Frontend | Popupcomponent | Vraagt bevestiging en reden. | Reden is verplicht. | POP-BEH-ACC-NONPUBLIC-ROLE-CONFIRM. |
| 6 | Beheerder | Popupcomponent | Bevestigt de actie met reden. | De backend ontvangt actie, rol en reden. | Bevestiging. |
| 7 | Backend | RoleService | Wijzigt UserRoles transactioneel. | Rol wordt toegekend of ingetrokken. | UserRoles. |
| 8 | Backend | Accountlog | Legt niet-publieke rolactie vast. | Actor, doelaccount, rol, actie, reden en tijdstip zijn auditbaar. | Accountlogkanaal. |
| 9 | Frontend | Accountdetail | Toont bijgewerkte rolset. | De beheerder ziet de nieuwe niet-publieke rolstatus. | Nieuwe rolset. |
8. Alternatieve en exceptionele processtromen
| Stap | Situatie | Afhandeling | PopupKey | Datagevolg |
|---|---|---|---|---|
| 2 | Actor mag geen niet-publieke rollen beheren. | De actie wordt geweigerd. | Niet van toepassing. | Geen. |
| 3 | Rol bestaat niet of is inactief. | De actie wordt geweigerd en de rolset wordt opnieuw geladen. | Niet van toepassing. | Geen. |
| 4 | Doelaccount heeft actieve Leerlingrol. | Toekenning van Admin of TestDocent wordt geblokkeerd. | Niet van toepassing. | Geen. |
| 4 | Intrekken Admin zou laatste actieve beheerder verwijderen. | De actie wordt geblokkeerd. | Niet van toepassing. | Geen. |
| 5 | Reden ontbreekt. | Bevestigen blijft onmogelijk. | POP-BEH-ACC-NONPUBLIC-ROLE-CONFIRM. | Geen. |
| 6 | Beheerder annuleert. | Er wordt niets opgeslagen. | POP-BEH-ACC-NONPUBLIC-ROLE-CONFIRM. | Geen. |
9. Business rules
| ID | Business rule |
|---|---|
| BR-001 | Niet-publieke rollen kunnen alleen via beheer worden toegekend of ingetrokken. |
| BR-002 | Roles.IsPublic = false betekent dat eindgebruikers de rol niet zelf kunnen kiezen. |
| BR-003 | Toekenning of intrekking van niet-publieke rollen vereist een reden. |
| BR-004 | Admin en TestDocent mogen niet op een actieve leerlingaccount worden geplaatst. |
| BR-005 | Het laatste actieve beheerdersaccount moet beschermd blijven. |
| BR-006 | Niet-publieke rolmutaties worden accountlogmatig vastgelegd. |
| BR-007 | De actie wijzigt geen identity-providerclaims, wachtwoorden of credentials. |
10. Datavalidatie
| ID | Validatie |
|---|---|
| VAL-001 | RoleId moet bestaan, actief zijn en IsPublic = false hebben. |
| VAL-002 | Doelaccount moet bestaan en niet geanonimiseerd zijn. |
| VAL-003 | Reden is verplicht en mag niet leeg of alleen whitespace zijn. |
| VAL-004 | Admin-intrekking vereist controle op minimaal één resterende actieve beheerder. |
| VAL-005 | Actieve UserId + RoleId-combinatie blijft uniek. |
| VAL-006 | Concurrente rolwijziging moet opnieuw gevalideerd worden vlak voor opslaan. |
11. Datamutaties en events
| Onderdeel | Mutatie / event |
|---|---|
| UserRoles toevoegen of intrekken | Niet-publieke roltoekenning krijgt auditvelden of wordt ingetrokken met auditvelden. |
| Accountlogkanaal | Niet-publieke rolactie wordt met reden vastgelegd. |
12. Geen datamutaties
| Object / gegeven | Niet wijzigen |
|---|---|
| Users | Geen accountstatus of profielgegevens wijzigen. |
| Identity provider | Geen claims, groepen, credentials of sessies wijzigen. |
| ExerciseModules | Geen testzichtbaarheid van modules wijzigen. |
| Relaties en autorisaties | Geen automatische relatie- of toegangsmutatie. |
13. State diagram
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Gebruik |
|---|---|
| POP-BEH-ACC-NONPUBLIC-ROLE-CONFIRM | Bevestiging met verplichte reden voor niet-publieke roltoekenning of intrekking. |
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 | Niet-publieke rollen zoals Beheerder en TestDocent worden alleen via beheer toegekend. |
| Technisch Ontwerp | Technisch Ontwerp: identiteit en accountlifecycle, autorisatie, logging en foutafhandeling en privacy en anonimisering beschrijven de technische uitwerking. Roles.IsPublic stuurt zichtbaarheid en toekenbaarheid; UserRoles draagt de mutatiehistorie. |
| Software Requirements Specification | SRS moet redenplicht, laatste-beheerderbescherming en leerling-exclusiviteit vastleggen. |
| Database | Gebruikt Roles.IsPublic en UserRoles; logt in accountlogkanaal. |
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-004-REQ-001 | SRS-ADM-002 SRS-ADM-001 AC-ADM-002 AC-ADM-001 | Niet-publieke rollen uitsluitend via beheer toekenbaar maken |
UC-BEH-ACC-004-REQ-002 | SRS-ADM-002 SRS-ADM-001 AC-ADM-002 AC-ADM-001 | Roles.IsPublic gebruiken om publieke en niet-publieke rollen te onderscheiden |
UC-BEH-ACC-004-REQ-003 | SRS-ADM-002 SRS-ADM-001 AC-ADM-002 AC-ADM-001 | Een reden verplicht stellen voor niet-publieke rolmutaties |
UC-BEH-ACC-004-REQ-004 | SRS-AUTH-001 SRS-ACC-002 SRS-LRN-009 SRS-TCH-005 SRS-ADM-002 SRS-ADM-001 AC-AUTH-001 AC-ACC-002 AC-LRN-009 AC-TCH-005 AC-ADM-002 AC-ADM-001 | Admin- en TestDocent-toekenning aan leerlingaccounts blokkeren |
UC-BEH-ACC-004-REQ-005 | SRS-ACC-002 SRS-ADM-002 SRS-ADM-001 AC-ACC-002 AC-ADM-002 AC-ADM-001 | Voorkomen dat het laatste actieve beheerdersaccount verdwijnt |
UC-BEH-ACC-004-REQ-006 | SRS-ADM-002 SRS-ADM-001 SRS-NFR-AUD-001 AC-ADM-002 AC-ADM-001 AC-NFR-AUD-001 | Niet-publieke rolmutaties auditbaar loggen |
UC-BEH-ACC-004-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 niet-publieke rolmutaties geen identity-providercredentials wijzigen |