Skip to main content

UC-BEH-ACC-004 — Niet-publieke rol toekennen of intrekken

1. Kerngegevens

VeldWaarde
Usecase-IDUC-BEH-ACC-004
NaamNiet-publieke rol toekennen of intrekken
DomeinBeheerder / Accountbeheer
Primaire actorBeheerder
Secundaire actor(en)Frontend, backend, database, autorisatiecomponent, identity-providerkoppeling, accountlogkanaal
RolcontextActieve beheerdercontext; server-side bepaald vanuit de ingelogde gebruiker
Betrokken schermenAccounts beheren > Accountdetail > Rollen
Gerelateerde usecasesUC-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 entiteitenUsers, Roles, UserRoles, UserSettings, ProfileAvatars, accountlogkanaal
Secundaire entiteiten / eventsUserRelationships, RelationshipInvitations, TeacherLevels, TeacherLevelAuthorizations, LevelCollaborators, ExerciseRuns, LiveViewAudit, SystemMessages, PrivateMessageThreads, Tickets
Gerelateerde popupsPOP-BEH-ACC-NONPUBLIC-ROLE-CONFIRM
PopupregisterOntwerpbronnen — Popup-register
MoSCoWMust

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

OnderdeelAfbakening
Generiek / AccountLogin, provisioning, logout en selfservice-accountverwijdering blijven bronhoudend in het generieke accountdomein.
Generiek / Profiel en voorkeurenEigen profiel- en voorkeurenbeheer blijft gebruikergericht; accountbeheer bevat alleen beheerdercorrecties en uitzonderingsacties.
Generiek / RelatiesRelatie-uitnodigingen, acceptatie en normale ontkoppeling blijven in het relatiedomein; accountbeheer kan wel afhankelijke toegang beëindigen bij lifecycle-acties.
Beheerder / DocentondersteuningDocentstructuur, leerlingtoegang en collaborators worden daar supportmatig beheerd; accountbeheer ziet accountbrede identiteit, rollen en lifecycle.
Identity providerAuthenticatie, wachtwoorden, verificatie, tokens en credentials blijven buiten OefenHub-accountbeheer.

4. Pre-condities

IDVoorwaarde
PRE-001De gebruiker is succesvol ingelogd in OefenHub.
PRE-002De backend heeft server-side vastgesteld dat de gebruiker een actieve beheerderrol heeft.
PRE-003De beheerder bevindt zich binnen Accounts beheren of een onderliggende accountbeheerroute.
PRE-004Clientstate, routeparameters of verborgen formuliervelden bepalen nooit welk account gewijzigd mag worden.
PRE-005De identity provider blijft bronhouder voor authenticatie, wachtwoorden, tokens, sessies en credential lifecycle.
PRE-006De beheerder heeft accountdetail geopend.
PRE-007Het doelaccount is niet geanonimiseerd.
PRE-008De niet-publieke rol bestaat in Roles en is actief.
PRE-009De beheerder heeft rechten om niet-publieke rollen te beheren.

5. Post-condities

IDResultaat
POST-001De niet-publieke rol is toegekend of ingetrokken via UserRoles.
POST-002De reden is vastgelegd in het accountlogkanaal.
POST-003GrantedAtUtc/GrantedByUserId of RevokedAtUtc/RevokedByUserId zijn gevuld.
POST-004Laatste-beheerderbescherming is toegepast.
POST-005Er 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

StapActorComponent / contextActieResultaatData / controle
1BeheerderRollenpaneelKiest niet-publieke rol toekennen of intrekken.De frontend opent de bevestigingsflow.Role.Code bijvoorbeeld Admin of TestDocent.
2BackendAutorisatiecomponentControleert beheerdercontext en autorisatie voor niet-publieke rollen.Alleen bevoegde beheerder mag doorgaan.Server-side controle.
3BackendRoleServiceLaadt doelaccount, rol en huidige rolset.De actuele situatie wordt vastgesteld.Users, Roles, UserRoles.
4BackendRoleServiceValideert combinatieregels en laatste-beheerderbescherming.Ongeldige acties worden geblokkeerd.Leerling exclusief en Admin-bescherming.
5FrontendPopupcomponentVraagt bevestiging en reden.Reden is verplicht.POP-BEH-ACC-NONPUBLIC-ROLE-CONFIRM.
6BeheerderPopupcomponentBevestigt de actie met reden.De backend ontvangt actie, rol en reden.Bevestiging.
7BackendRoleServiceWijzigt UserRoles transactioneel.Rol wordt toegekend of ingetrokken.UserRoles.
8BackendAccountlogLegt niet-publieke rolactie vast.Actor, doelaccount, rol, actie, reden en tijdstip zijn auditbaar.Accountlogkanaal.
9FrontendAccountdetailToont bijgewerkte rolset.De beheerder ziet de nieuwe niet-publieke rolstatus.Nieuwe rolset.

8. Alternatieve en exceptionele processtromen

StapSituatieAfhandelingPopupKeyDatagevolg
2Actor mag geen niet-publieke rollen beheren.De actie wordt geweigerd.Niet van toepassing.Geen.
3Rol bestaat niet of is inactief.De actie wordt geweigerd en de rolset wordt opnieuw geladen.Niet van toepassing.Geen.
4Doelaccount heeft actieve Leerlingrol.Toekenning van Admin of TestDocent wordt geblokkeerd.Niet van toepassing.Geen.
4Intrekken Admin zou laatste actieve beheerder verwijderen.De actie wordt geblokkeerd.Niet van toepassing.Geen.
5Reden ontbreekt.Bevestigen blijft onmogelijk.POP-BEH-ACC-NONPUBLIC-ROLE-CONFIRM.Geen.
6Beheerder annuleert.Er wordt niets opgeslagen.POP-BEH-ACC-NONPUBLIC-ROLE-CONFIRM.Geen.

9. Business rules

IDBusiness rule
BR-001Niet-publieke rollen kunnen alleen via beheer worden toegekend of ingetrokken.
BR-002Roles.IsPublic = false betekent dat eindgebruikers de rol niet zelf kunnen kiezen.
BR-003Toekenning of intrekking van niet-publieke rollen vereist een reden.
BR-004Admin en TestDocent mogen niet op een actieve leerlingaccount worden geplaatst.
BR-005Het laatste actieve beheerdersaccount moet beschermd blijven.
BR-006Niet-publieke rolmutaties worden accountlogmatig vastgelegd.
BR-007De actie wijzigt geen identity-providerclaims, wachtwoorden of credentials.

10. Datavalidatie

IDValidatie
VAL-001RoleId moet bestaan, actief zijn en IsPublic = false hebben.
VAL-002Doelaccount moet bestaan en niet geanonimiseerd zijn.
VAL-003Reden is verplicht en mag niet leeg of alleen whitespace zijn.
VAL-004Admin-intrekking vereist controle op minimaal één resterende actieve beheerder.
VAL-005Actieve UserId + RoleId-combinatie blijft uniek.
VAL-006Concurrente rolwijziging moet opnieuw gevalideerd worden vlak voor opslaan.

11. Datamutaties en events

OnderdeelMutatie / event
UserRoles toevoegen of intrekkenNiet-publieke roltoekenning krijgt auditvelden of wordt ingetrokken met auditvelden.
AccountlogkanaalNiet-publieke rolactie wordt met reden vastgelegd.

12. Geen datamutaties

Object / gegevenNiet wijzigen
UsersGeen accountstatus of profielgegevens wijzigen.
Identity providerGeen claims, groepen, credentials of sessies wijzigen.
ExerciseModulesGeen testzichtbaarheid van modules wijzigen.
Relaties en autorisatiesGeen automatische relatie- of toegangsmutatie.

13. State diagram

14. Decision flow

15. Data lifecycle diagram

16. Sequence diagrammen

17. Popupverwijzingen

PopupKeyGebruik
POP-BEH-ACC-NONPUBLIC-ROLE-CONFIRMBevestiging 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

DocumentAfleiding
Functioneel OntwerpNiet-publieke rollen zoals Beheerder en TestDocent worden alleen via beheer toegekend.
Technisch OntwerpTechnisch 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 SpecificationSRS moet redenplicht, laatste-beheerderbescherming en leerling-exclusiviteit vastleggen.
DatabaseGebruikt 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-afleidingDektUsecasecontext
UC-BEH-ACC-004-REQ-001SRS-ADM-002
SRS-ADM-001
AC-ADM-002
AC-ADM-001
Niet-publieke rollen uitsluitend via beheer toekenbaar maken
UC-BEH-ACC-004-REQ-002SRS-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-003SRS-ADM-002
SRS-ADM-001
AC-ADM-002
AC-ADM-001
Een reden verplicht stellen voor niet-publieke rolmutaties
UC-BEH-ACC-004-REQ-004SRS-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-005SRS-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-006SRS-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-007SRS-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