UC-GEN-ACC-001 — Eerste login en account provisioning
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-GEN-ACC-001 |
| Naam | Eerste login en account provisioning |
| Domein | Generiek / Account |
| Primaire actor | Gebruiker |
| Secundaire actor(en) | Identity provider, OefenHub backend, relatie- en berichtenservice |
| Rolcontext | Publieke of nog niet volledig bepaalde rolcontext na succesvolle authenticatie; definitieve OefenHub-rolcontext wordt server-side bepaald uit UserRoles en eventuele geldige registratie- of uitnodigingscontext. |
| Betrokken schermen | Externe login-/registratieflow bij de identity provider; OefenHub-authentication callback; doorgeleiding naar frontpage, profiel of verplichte vervolgflow. |
| Gerelateerde usecases | UC-GEN-PROF-001 — Profiel bekijken; UC-GEN-PROF-003 — Verplicht niveau instellen; UC-GEN-REL-005 — Relatie-uitnodiging accepteren of afwijzen; UC-GEN-MSG-001 — Berichtenoverzicht bekijken |
| Primaire entiteiten | Users, UserRoles, Roles, UserSettings |
| Secundaire entiteiten / events | RelationshipInvitations, RelationshipEvents, SystemMessages, account-provisioninglog |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe OefenHub na een succesvolle login via de externe identity provider controleert of de gebruiker al als intern OefenHub-account bestaat. Wanneer nog geen intern account bestaat, maakt OefenHub een Users-record aan, koppelt dit aan de stabiele externe identity-provider-id, initialiseert de benodigde basisinstellingen en verwerkt openstaande relatie-uitnodigingen die naar hetzelfde genormaliseerde e-mailadres zijn verstuurd.
De usecase begint pas nadat de identity provider de gebruiker succesvol heeft geauthenticeerd. Authenticatie, wachtwoorden, e-mailverificatie, credentialbeheer en sessie-uitgifte zelf vallen buiten OefenHub en buiten deze usecase.
3. Scope
Deze usecase omvat:
- verwerken van een succesvolle identity-providerlogin binnen OefenHub;
- controleren of
Users.ExternalIdal bekend is; - idempotent ophalen van het bestaande interne account;
- aanmaken van een nieuw intern
Users-record wanneer het externe account nog niet gekoppeld is; - vastleggen van de stabiele externe identity-provider-id in
Users.ExternalId; - initialiseren van verplichte basisvelden,
UserSettingsen waar van toepassing initiële publieke rolcontext; - blokkeren of veilig afbreken bij ontbrekende of conflicterende identity-data;
- koppelen van geldige pending relatie-uitnodigingen op genormaliseerd e-mailadres;
- aanmaken van systeemberichten voor gekoppelde inkomende relatie-uitnodigingen;
- vastleggen van auditbare provisioning- en koppelgebeurtenissen waar relevant;
- bepalen van de eerstvolgende OefenHub-route na provisioning.
Deze usecase omvat niet:
- registratie, loginformulier, e-mailverificatie, wachtwoordbeheer of sessiebeleid van de identity provider;
- wijzigen van e-mailadres of wachtwoord;
- account verwijderen, deactiveren of anonimiseren;
- accepteren of afwijzen van relatie-uitnodigingen;
- kiezen of toevoegen van een ontbrekende doelrol bij acceptatie van een relatie-uitnodiging;
- verplicht niveau instellen na provisioning;
- beheerderstoekenning van niet-publieke rollen;
- inhoudelijke frontpage-opbouw na succesvolle provisioning.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker heeft een succesvolle authenticatie bij de externe identity provider doorlopen. |
| PRE-002 | De identity provider levert een stabiele externe gebruikers-id aan die geschikt is voor Users.ExternalId. |
| PRE-003 | De identity provider levert een e-mailadres of een ander door OefenHub verplicht verklaard identificerend profielgegeven aan. |
| PRE-004 | De OefenHub backend kan de token-/claimset server-side valideren. |
| PRE-005 | De accountprovisioning wordt binnen één transactioneel of idempotent verwerkingspad uitgevoerd om dubbele accounts te voorkomen. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Voor een bekende ExternalId is het bestaande interne Users-record geladen en is geen tweede gebruiker aangemaakt. |
| POST-002 | Voor een nieuwe ExternalId is precies één actief intern Users-record aangemaakt. |
| POST-003 | Voor een nieuw account is een bijbehorend UserSettings-record aanwezig of aantoonbaar geïnitialiseerd. |
| POST-004 | Geldige pending relatie-uitnodigingen voor het genormaliseerde e-mailadres zijn waar mogelijk gekoppeld aan Users.Id. |
| POST-005 | Voor gekoppelde inkomende uitnodigingen zijn mailbox-systeemberichten aangemaakt zodat de gebruiker deze later kan openen en verwerken. |
| POST-006 | De gebruiker wordt doorgestuurd naar de passende OefenHub-vervolgroute. |
| POST-007 | Bij conflicterende of onvolledige identity-data is geen half aangemaakt of inconsistent account zichtbaar voor reguliere gebruikersflows. |
| POST-008 | Wanneer de identity-providerlogin wel slaagt maar de interne OefenHub-initialisatie niet volledig kan worden afgerond, krijgt de gebruiker geen reguliere OefenHub-toegang en wordt de fout technisch herleidbaar vastgelegd. |
6. Trigger
De usecase start wanneer de gebruiker na succesvolle authenticatie bij de externe identity provider terugkeert naar OefenHub en de OefenHub backend de identity-providercallback, token of sessiecontext verwerkt.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Gebruiker | Identity provider | Rondt login of registratie succesvol af. | Identity provider stuurt de gebruiker terug naar OefenHub met een geldige authenticatiecontext. | Credentials blijven buiten OefenHub. |
| 2 | OefenHub frontend | Auth callback | Ontvangt de terugkeer naar OefenHub. | Frontend start de server-side sessie- of profielcontrole. | Frontend bepaalt niet zelf of een account bestaat. |
| 3 | OefenHub backend | Authenticatielaag | Valideert token, sessie en vereiste claims. | Alleen een geldig en betrouwbaar geauthenticeerd subject wordt verder verwerkt. | ExternalId moet server-side betrouwbaar zijn. |
| 4 | OefenHub backend | Accountservice | Normaliseert identity-data voor interne verwerking. | E-mailadres wordt case-insensitive genormaliseerd voor matching en uitnodigingskoppeling. | Normalisatie wijzigt niet de credentialbron bij de identity provider. |
| 5 | OefenHub backend | Accountservice / database | Zoekt een actief of bestaand Users-record op basis van ExternalId. | Wanneer een gebruiker bestaat, wordt provisioning als idempotente bestaande-accountflow afgehandeld. | Users.ExternalId is uniek. |
| 6 | OefenHub backend | Accountservice / database | Stelt vast dat nog geen intern account bestaat. | Backend start een gecontroleerde accountprovisioning. | Nieuwe gebruiker wordt alleen na succesvolle identity-providerlogin aangemaakt. |
| 7 | OefenHub backend | Accountservice / database | Maakt Users aan met interne GUID, ExternalId, e-mailadres, naamvelden en IsActive = true. | Intern OefenHub-account bestaat en is gekoppeld aan de externe identiteit. | OefenHub bewaart geen wachtwoord of credentialstatus. |
| 8 | OefenHub backend | Instellingenservice / database | Maakt of initialiseert UserSettings. | Standaardwaarden voor voorkeuren en toegankelijkheid zijn beschikbaar. | UserSettings.UserId is één-op-één met Users.Id. |
| 9 | OefenHub backend | Rollenservice / database | Verwerkt beschikbare initiële publieke rolcontext, indien deze betrouwbaar uit de registratieflow beschikbaar is. | Alleen toegestane publieke rollen worden als actieve UserRoles vastgelegd. | Niet-publieke rollen worden niet via publieke provisioning toegekend. |
| 10 | OefenHub backend | Relatieservice / database | Zoekt pending RelationshipInvitations voor hetzelfde genormaliseerde e-mailadres. | Geldige uitnodigingen binnen de koppelingstermijn worden geselecteerd. | Uitnodigingen naar onbekende e-mailadressen hebben ToEmail gevuld en ToUserId = null. |
| 11 | OefenHub backend | Relatieservice / database | Koppelt geselecteerde uitnodigingen aan het nieuwe account. | RelationshipInvitations.ToUserId wordt gevuld en koppelgebeurtenis wordt auditbaar. | Alleen nog geldige pending uitnodigingen worden gekoppeld. |
| 12 | OefenHub backend | Berichtenservice / database | Maakt systeemberichten aan voor gekoppelde inkomende uitnodigingen. | De gebruiker kan uitnodigingen via het berichtenoverzicht openen. | SystemMessages.EntityType = RelationshipInvitation; EntityId = RelationshipInvitations.Id. |
| 13 | OefenHub backend | Accountservice / auditlog | Legt relevante provisioning- en koppelmomenten vast. | Provisioning is herleidbaar zonder credentialgegevens op te slaan. | Accountacties kunnen aanvullend in een beperkt accountlogkanaal worden vastgelegd. |
| 14 | OefenHub backend | Routering / frontend | Bepaalt de volgende route. | Gebruiker gaat naar frontpage, profiel, verplicht-niveauflow of een andere noodzakelijke vervolgflow. | Routekeuze volgt uit rolcontext, profielvolledigheid en bestaande business rules. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 3 | Token of sessiecontext is ongeldig. | OefenHub accepteert de callback niet en stuurt de gebruiker terug naar de generieke loginflow. | Geen domeinpopup. | Geen. |
| ALT-002 | 3 | Verplichte claim voor ExternalId ontbreekt. | Provisioning wordt geblokkeerd en technisch gelogd. De gebruiker krijgt een generieke accountfout of wordt opnieuw naar login geleid. | Geen domeinpopup. | Geen accountmutatie. |
| ALT-003 | 4 | E-mailadres ontbreekt of is niet bruikbaar voor OefenHub. | Provisioning wordt niet afgerond zolang het verplichte identificerende gegeven ontbreekt. | Generieke accountfout of identity-providerroute. | Geen of rollback van voorbereidende mutaties. |
| ALT-004 | 5 | ExternalId bestaat al. | Backend gebruikt het bestaande Users-record en voert alleen noodzakelijke sessie-/last-seen-/contextverwerking uit. | Geen. | Eventueel LastSeenAtUtc of technische sessiecontext bijgewerkt. |
| ALT-005 | 5 | ExternalId bestaat, maar Users.IsActive = false. | Gebruiker krijgt geen reguliere toegang; OefenHub behandelt dit als gedeactiveerd of verwijderd intern account. | Generieke toegang-/accountmelding buiten popupregister. | Geen reguliere provisioning. |
| ALT-006 | 5 | E-mailadres hoort al bij een ander intern account met andere ExternalId. | Provisioning wordt geblokkeerd en als accountconflict gelogd. | Generieke accountfout. | Geen nieuw account. |
| ALT-007 | 9 | Initiële rolcontext ontbreekt. | Account kan worden aangemaakt, maar de gebruiker wordt doorgestuurd naar een onvolledig-account- of rolkeuzeflow wanneer dat functioneel vereist is. | Geen domeinpopup vanuit deze usecase. | Users en UserSettings kunnen bestaan; UserRoles mogelijk nog leeg of beperkt. |
| ALT-008 | 9 | Aangevraagde rol is niet publiek of niet actief. | Rol wordt niet toegekend via provisioning; vervolgflow of beheerhandeling is nodig. | Geen domeinpopup. | Geen UserRoles-record voor die rol. |
| ALT-009 | 10 | Er zijn geen pending uitnodigingen voor het e-mailadres. | Provisioning gaat door zonder relatiekoppeling of systeembericht voor uitnodigingen. | Geen. | Geen relatie- of berichtmutatie. |
| ALT-010 | 10 | Pending uitnodiging is verlopen of niet meer geldig. | Uitnodiging wordt niet gekoppeld. Eventuele verlopenafhandeling blijft eigendom van cleanup-/relatiedomein. | Geen. | Geen ToUserId-koppeling voor deze uitnodiging. |
| ALT-011 | 11 | Meerdere geldige pending uitnodigingen bestaan voor hetzelfde e-mailadres. | Alle geldige uitnodigingen worden aan het account gekoppeld, mits zij afzonderlijk valide zijn. | Geen. | Meerdere uitnodigingen kunnen ToUserId krijgen en elk een systeembericht opleveren. |
| ALT-012 | 12 | Systeembericht kan niet worden aangemaakt na uitnodigingskoppeling. | Transactie wordt teruggedraaid of de fout wordt technisch hersteld volgens transactionele inrichting; gebruiker ziet geen halve uitnodigingsflow. | Geen domeinpopup. | Geen inconsistente halfverwerking. |
| ALT-013 | 7-13 | Identity-providerlogin of registratie is gelukt, maar de interne OefenHub-initialisatie faalt na start van provisioning. | OefenHub beschouwt de login als niet bruikbaar voor reguliere toegang, toont een generieke accountfout of contactroute en logt de exacte technische oorzaak voor beheeranalyse. Er wordt geen automatische gebruikersgerichte herstelactie aangeboden. | Generieke accountfout buiten popupregister. | Geen half bruikbaar account; uitgevoerde mutaties worden transactioneel teruggedraaid of het account blijft intern geblokkeerd/onvolledig en niet regulier toegankelijk totdat beheer of technische analyse dit oplost. |
| ALT-014 | 14 | Verplicht niveau ontbreekt na provisioning. | Gebruiker wordt naar UC-GEN-PROF-003 geleid. | Popup of waarschuwing hoort bij profielusecase. | Geen extra mutatie in deze usecase. |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | OefenHub is niet de bronhouder voor authenticatie, wachtwoorden, sessies of credential-lifecycle. |
| BR-002 | Een intern OefenHub-account mag pas worden aangemaakt na succesvolle, server-side gevalideerde authenticatie bij de externe identity provider. |
| BR-003 | Users.ExternalId is de stabiele koppelsleutel naar de externe identity provider en mag niet via de GUI wijzigbaar zijn. |
| BR-004 | Provisioning is idempotent: dezelfde ExternalId mag nooit tot meerdere actieve of historische Users-records leiden. |
| BR-005 | E-mailadresvergelijking voor provisioningconflicten en uitnodigingskoppeling gebeurt case-insensitive en genormaliseerd. |
| BR-006 | Users bevat basisprofielgegevens, maar voorkeuren en toegankelijkheidsinstellingen horen in UserSettings. |
| BR-007 | Voor een nieuw account moet een UserSettings-record beschikbaar zijn voordat reguliere gebruikersflows afhankelijk worden van instellingen. |
| BR-008 | Publieke rolkeuze mag alleen leiden tot UserRoles voor actieve publieke rollen. Niet-publieke rollen vereisen beheer- of administratieve toekenning. |
| BR-009 | Een relatie-uitnodiging naar een onbekend e-mailadres kan pas aan een gebruiker worden gekoppeld nadat er een intern Users.Id bestaat. |
| BR-010 | Voor gekoppelde inkomende relatie-uitnodigingen wordt de primaire ingang voor de gebruiker een systeembericht; de relatiepagina toont geen aparte inkomende-uitnodigingenlijst. |
| BR-011 | Een systeembericht voor een relatie-uitnodiging mag pas worden aangemaakt nadat de uitnodiging aan een bestaand intern account gekoppeld kan worden. |
| BR-012 | Provisioning mag geen relatie accepteren, afwijzen of actief maken; dat gebeurt pas in de relatieverwerkingsusecase. |
| BR-013 | Bij een gedeactiveerd of geanonimiseerd intern account mag een nieuwe login met dezelfde externe identiteit niet stilzwijgend een nieuw regulier account aanmaken. |
| BR-014 | Accountprovisioning moet transactioneel of herstelbaar zijn zodat geen half aangemaakte accounts, settings of uitnodigingskoppelingen ontstaan. |
| BR-015 | Wanneer externe authenticatie slaagt maar interne OefenHub-initialisatie faalt, mag de gebruiker niet alsnog een gedeeltelijke OefenHub-sessie krijgen. |
| BR-016 | Interne provisioningfouten worden technisch gelogd met voldoende correlatie-informatie voor beheeranalyse, zonder credentials, tokens of wachtwoorden op te slaan. |
| BR-017 | Credentialgegevens, wachtwoorden en identity-providerinterne status worden niet in OefenHub-domeintabellen opgeslagen. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Identity-provider token / sessie | Moet server-side valide, niet verlopen en afkomstig van de vertrouwde identity provider zijn. |
Externe subject-id / ExternalId | Verplicht, stabiel, uniek binnen Users en niet wijzigbaar via de GUI. |
| E-mailadres | Verplicht wanneer OefenHub dit als identificerend gegeven gebruikt; case-insensitive normaliseren voor uniqueness- en uitnodigingsmatching. |
Users.Email | Moet uniek zijn binnen actieve en historische accountregels volgens de gekozen accountlifecycle-regels. |
Users.DisplayName | Verplicht voor uniforme weergave in UI en berichten; mag niet uitsluitend uit lege tekens bestaan. |
Users.FirstName, MiddleName, LastName | Waarden moeten voldoen aan lengte- en systeemwaarderegels; gereserveerde systeemwaarde # mag niet via normale UI-input worden opgeslagen. |
Users.ProfileAvatarId | Mag null zijn of moet verwijzen naar een actieve vooraf gedefinieerde avatar. |
UserSettings.UserId | Per gebruiker maximaal één settingsrecord. |
| Initiële rolcode | Alleen actieve, publieke en voor registratie/provisioning toegestane rollen mogen automatisch worden toegekend. |
| Pending relatie-uitnodiging | Moet Status = Pending hebben, binnen de geldige koppelingstermijn vallen en hetzelfde genormaliseerde e-mailadres gebruiken. |
RelationshipInvitations.ToUserId | Mag alleen worden gevuld met het nieuwe Users.Id wanneer de uitnodiging nog geldig en niet afgehandeld is. |
SystemMessages.EntityType | Voor gekoppelde relatie-uitnodigingen: RelationshipInvitation. |
SystemMessages.EntityId | Moet verwijzen naar de gekoppelde RelationshipInvitations.Id volgens applicatielogica. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 5 | Read | Users | Zoekt bestaand account op basis van ExternalId. |
| 7 | Create | Users | Maakt intern account aan met ExternalId, e-mailadres, naamvelden, IsActive = true en timestamps. |
| 8 | Create | UserSettings | Initialiseert standaardinstellingen voor de nieuwe gebruiker. |
| 9 | Create | UserRoles | Legt toegestane initiële publieke roltoekenning vast indien betrouwbaar beschikbaar. |
| 10 | Read | RelationshipInvitations | Zoekt geldige pending uitnodigingen op genormaliseerd e-mailadres. |
| 11 | Update | RelationshipInvitations | Vult ToUserId voor geldige gekoppelde uitnodigingen. |
| 11 | Create | RelationshipEvents | Legt koppelgebeurtenis vast, bijvoorbeeld invitation_linked_to_user. |
| 12 | Create | SystemMessages | Maakt systeembericht voor de nieuwe gebruiker met verwijzing naar de gekoppelde uitnodiging. |
| 13 | Log | Account-provisioninglog | Legt provisioning, conflictsituaties en interne initialisatiefouten auditbaar vast zonder credentials. |
| 14 | Update | Users | Eventueel bijwerken van LastSeenAtUtc of sessiegerelateerde activiteit. |
| ALT-013 | Log | Account-provisioninglog | Legt vast dat externe authenticatie is gelukt maar interne OefenHub-initialisatie niet bruikbaar is afgerond. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Identity-provider account | OefenHub beheert geen registratie, wachtwoord, e-mailverificatie of credentialstatus bij de identity provider. |
RelationshipInvitations.Status | Provisioning koppelt uitnodigingen aan een gebruiker, maar accepteert of wijst ze niet af. |
UserRelationships | Er ontstaat nog geen actieve relatie tijdens provisioning. |
PrivateMessageThreads | Accountprovisioning start geen privégesprek. |
PrivateMessages | Accountprovisioning maakt geen privébericht aan. |
Ticket*-tabellen | Meldingen/tickets worden niet geraakt door eerste accountprovisioning. |
ProfileAvatars | De vaste avatarset wordt niet gewijzigd. |
SiteFeatureToggles | Featuretoggles worden niet aangepast. |
SystemMessages.ReadAtUtc | Aangemaakte systeemberichten zijn nog ongelezen; lezen gebeurt pas bij openen. |
13. State diagram
Deze usecase raakt geen zelfstandig statusobject met meerdere functionele statussen. De accountlifecycle wordt hier alleen initieel bepaald: geen intern account, bestaand actief account, gedeactiveerd account of nieuw geprovisioneerd actief account.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
16.1 Nieuwe gebruiker wordt geprovisioneerd
16.2 Bestaande gebruiker logt opnieuw in
16.3 Provisioning wordt geblokkeerd door conflict
17. Popupverwijzingen
| PopupKey | Moment | Variant | Doel |
|---|---|---|---|
| Niet van toepassing | Niet van toepassing | Niet van toepassing | Loginflow, accountfouten en toegangsbewaking worden generiek afgehandeld buiten het domeinspecifieke popupregister. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijf eerste OefenHub-verwerking na succesvolle identity-providerlogin als aparte accountprovisioningflow. |
| Functioneel Ontwerp | Beschrijft dat registratie, e-mailverificatie, wachtwoorden en sessies buiten OefenHub bij de identity provider liggen. |
| Functioneel Ontwerp | Beschrijf dat een nieuw intern OefenHub-account pas ontstaat na succesvolle login en dat ExternalId de stabiele koppelsleutel is. |
| Functioneel Ontwerp | Beschrijf de gebruikersroute na provisioning: frontpage, profiel, verplicht niveau of onvolledig-accountflow. |
| Functioneel Ontwerp | Beschrijf dat inkomende relatie-uitnodigingen na provisioning via systeemberichten beschikbaar worden gemaakt. |
| Technisch Ontwerp: identiteit, authenticatie en rolcontext, relatiebeheer, communicatie | Beschrijft provisioning idempotent op Users.ExternalId met unieke constraint en transactionele verwerking. |
| Technisch Ontwerp: identiteit, authenticatie en rolcontext, relatiebeheer, communicatie | Beschrijft claimvalidatie, e-mailnormalisatie, conflictcontrole en rollbackgedrag vast. |
| Technisch Ontwerp: identiteit, authenticatie en rolcontext, relatiebeheer, communicatie | Beschrijft initialisatie van Users, UserSettings, optionele UserRoles, RelationshipInvitations.ToUserId, RelationshipEvents en SystemMessages technisch uit. |
| Technisch Ontwerp: identiteit, authenticatie en rolcontext, relatiebeheer, communicatie | Beschrijft dat credentials en identity-providerinterne status niet in OefenHub-domeintabellen worden opgeslagen. |
| Technisch Ontwerp: identiteit, authenticatie en rolcontext, relatiebeheer, communicatie | Beschrijft account-provisioninglogging vast zonder gevoelige credentialdata. |
| Software Requirements Specification | Bevat requirements voor idempotente accountprovisioning, identity-providerafbakening, uitnodigingskoppeling en veilige foutafhandeling. |
| Database-informatie | Users, UserSettings, UserRoles, RelationshipInvitations, RelationshipEvents en SystemMessages moeten de beschreven provisioningflow ondersteunen. |
| Architectuur | Identity provider is externe bronhouder voor authenticatie; OefenHub is bronhouder voor applicatieprofiel, rollen, instellingen en domeinkoppelingen. |
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 |
|---|---|---|
REQ-UC-GEN-ACC-001-001 | SRS-AUTH-001 SRS-ACC-002 AC-AUTH-001 AC-ACC-002 | Na een succesvolle identity-providerlogin server-side controleren of de externe gebruiker al aan een intern Users-record gekoppeld is |
REQ-UC-GEN-ACC-001-002 | SRS-ACC-002 AC-ACC-002 | Voor een onbekende ExternalId precies één intern actief Users-record kunnen aanmaken |
REQ-UC-GEN-ACC-001-003 | SRS-ACC-002 SRS-NFR-SEC-001 SRS-NFR-PRV-001 SRS-ARCH-002 AC-ACC-002 AC-NFR-SEC-001 AC-NFR-PRV-001 AC-ARCH-002 | Geen wachtwoorden, credentialstatus of identity-providerinterne sessiegegevens in het domeinaccount opslaan |
REQ-UC-GEN-ACC-001-004 | SRS-ACC-001 SRS-ARCH-004 AC-ACC-001 AC-ARCH-004 | Accountprovisioning idempotent uitvoeren zodat herhaalde callbacks of opnieuw inloggen niet tot dubbele accounts leiden |
REQ-UC-GEN-ACC-001-005 | SRS-ACC-001 AC-ACC-001 | Bij accountprovisioning een UserSettings-record initialiseren of garanderen dat dit record beschikbaar is vóór reguliere gebruikersflows instellingen gebruiken |
REQ-UC-GEN-ACC-001-006 | SRS-ACC-001 SRS-NFR-AUD-001 AC-ACC-001 AC-NFR-AUD-001 | Alleen toegestane actieve publieke rollen automatisch via publieke provisioning kunnen vastleggen |
REQ-UC-GEN-ACC-001-007 | SRS-ACC-002 SRS-REL-001 AC-ACC-002 AC-REL-001 | Pending relatie-uitnodigingen op genormaliseerd e-mailadres kunnen koppelen aan het nieuwe interne account zolang de uitnodiging geldig is |
REQ-UC-GEN-ACC-001-008 | SRS-ACC-002 SRS-REL-001 SRS-MSG-001 AC-ACC-002 AC-REL-001 AC-MSG-001 | Na het koppelen van een inkomende relatie-uitnodiging een systeembericht voor de nieuwe gebruiker kunnen aanmaken |
REQ-UC-GEN-ACC-001-009 | SRS-ACC-001 SRS-REL-004 AC-ACC-001 AC-REL-004 | Verlopen, afgehandelde of conflicterende relatie-uitnodigingen niet automatisch koppelen tijdens provisioning |
REQ-UC-GEN-ACC-001-010 | SRS-AUTH-001 SRS-ACC-002 SRS-NFR-AUD-001 AC-AUTH-001 AC-ACC-002 AC-NFR-AUD-001 | Conflicterende identity-data blokkeren en auditbaar loggen zonder half aangemaakte domeinrecords zichtbaar te maken |
REQ-UC-GEN-ACC-001-011 | SRS-AUTH-001 SRS-ACC-001 SRS-ACC-003 AC-AUTH-001 AC-ACC-001 AC-ACC-003 | Na succesvolle provisioning een passende vervolgroute bepalen op basis van rolcontext, profielvolledigheid en verplichte vervolgflows |
REQ-UC-GEN-ACC-001-012 | SRS-ACC-001 AC-ACC-001 | Een gedeactiveerd intern account niet stilzwijgend vervangen door een nieuw account bij een volgende login met dezelfde externe identiteit |
REQ-UC-GEN-ACC-001-013 | SRS-AUTH-001 SRS-ACC-001 AC-AUTH-001 AC-ACC-001 | Een geslaagde externe authenticatie blokkeren voor reguliere toegang wanneer interne accountprovisioning of initialisatie niet volledig en consistent kan worden afgerond |
REQ-UC-GEN-ACC-001-014 | SRS-ACC-001 SRS-NFR-SEC-001 SRS-NFR-PRV-001 SRS-NFR-AUD-001 SRS-ARCH-002 AC-ACC-001 AC-NFR-SEC-001 AC-NFR-PRV-001 AC-NFR-AUD-001 AC-ARCH-002 | Interne provisioningfouten auditbaar en technisch herleidbaar loggen zonder credentials, tokens of wachtwoorden vast te leggen |
Aanvulling - externe relatie-uitnodigingen claimen
Tijdens provisioning claimt OefenHub pending externe relatie-uitnodigingen voor het geverifieerde e-mailadres van de gebruiker. Dit gebeurt pas nadat het e-mailadres betrouwbaar als geverifieerd beschikbaar is. Claimen maakt geen actieve relatie aan; de uitnodigingen blijven pending en worden in de eerste onboarding beoordeeld.