UC-BEH-ACC-008 — Account online-status bekijken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-ACC-008 |
| Naam | Account online-status bekijken |
| 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 > Accountoverzicht / Accountdetail |
| Gerelateerde usecases | UC-BEH-ACC-001, UC-BEH-ACC-002, UC-BEH-ACC-003, UC-BEH-ACC-004, UC-BEH-ACC-005, UC-BEH-ACC-006, UC-BEH-ACC-007, 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 | Niet van toepassing |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
De usecase beschrijft hoe een beheerder in accountbeheer kan zien of een gebruiker recent of actueel online lijkt te zijn. De online-status is bedoeld voor support en probleemanalyse, niet voor live meekijken of inhoudelijke sessiecontrole.
De beheerder mag geen live meekijkfunctie gebruiken tijdens actieve oefeningen. Wel mag accountbeheer LastSeenAtUtc, globale online-indicatie en relevante actieve applicatiecontext tonen voor zover dit geen inhoudelijke live-oefendata openbaart.
Online-status is afgeleid uit applicatiecontext en realtime-aanwezigheid. Er wordt geen aparte domeinsessietabel geïntroduceerd voor reguliere login/logout.
Uitgangspunten
- LastSeenAtUtc is persistent beschikbaar op Users.
- Realtime online-indicatie is een afgeleid technisch readmodel.
- Beheerder mag geschiedenis analyseren maar niet live meekijken.
- Online-status is informatief en geen autorisatiebron.
- Reguliere sessies worden niet als aparte relationele sessietabel opgeslagen.
3. Scope
Deze usecase beschrijft:
- Tonen van LastSeenAtUtc in accountoverzicht en detail.
- Tonen van actuele online-indicatie wanneer beschikbaar.
- Tonen van globale actieve context zonder live oefeninhoud.
- Afhandelen van onbekende of niet-beschikbare online-status.
- Afbakening ten opzichte van live meekijken.
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.
- Live meekijken met een actieve oefening door beheerder.
- Volledige sessiehistorie opslaan in een domeinsessietabel.
- Realtime oefenvraag, antwoord of voortgang tonen.
- Actieve identity-provider sessies beheren.
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 accountoverzicht of accountdetail geopend. |
| PRE-007 | Users.LastSeenAtUtc is beschikbaar of null. |
| PRE-008 | Realtime aanwezigheidsbron is beschikbaar of veilig niet-beschikbaar. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De beheerder ziet LastSeenAtUtc en eventueel online-indicatie. |
| POST-002 | Geen sessie-, account- of gebruikersdata is gewijzigd. |
| POST-003 | Live-oefeninhoud is niet getoond. |
| POST-004 | Onbekende status wordt niet als offline gepresenteerd. |
| POST-005 | Geen relationele sessietabel is gebruikt of aangemaakt. |
6. Trigger
De usecase start wanneer het accountoverzicht of accountdetail online- en laatst-gezieninformatie opvraagt.
7. Normale processtroom
| Stap | Actor | Component / context | Actie | Resultaat | Data / controle |
|---|---|---|---|---|---|
| 1 | Frontend | Accountoverzicht/detail | Vraagt online-informatie op. | De backend verzamelt LastSeen en aanwezigheid. | Users.Id. |
| 2 | Backend | Autorisatiecomponent | Controleert beheerdercontext. | Alleen beheerder krijgt accountonline-readmodel. | Server-side controle. |
| 3 | Backend | AccountService | Leest LastSeenAtUtc. | Persistente laatst-gezienwaarde wordt toegevoegd. | Users.LastSeenAtUtc. |
| 4 | Backend | PresenceService | Leest actuele aanwezigheid. | Realtime online-indicatie wordt afgeleid. | SignalR / applicatiecontext. |
| 5 | Backend | PresenceService | Verwijdert live-oefeninhoud uit readmodel. | Beheerder krijgt geen vraag-, antwoord- of voortgangsdata. | Privacy- en autorisatiegrens. |
| 6 | Frontend | Overzicht/detail | Toont status. | Online, offline, recent gezien of onbekend wordt zichtbaar. | Read-only status. |
8. Alternatieve en exceptionele processtromen
| Stap | Situatie | Afhandeling | PopupKey | Datagevolg |
|---|---|---|---|---|
| 2 | Actor is geen beheerder. | De online-informatie wordt geweigerd. | Niet van toepassing. | Geen. |
| 3 | LastSeenAtUtc is null. | De UI toont dat er geen laatst-gezienwaarde bekend is. | Niet van toepassing. | Geen. |
| 4 | PresenceService is niet beschikbaar. | De UI toont status onbekend, niet offline. | Niet van toepassing. | Geen. |
| 5 | Gebruiker is actief aan het oefenen. | De beheerder ziet hoogstens globale activiteit of context, geen live meekijkdata. | Niet van toepassing. | Geen. |
| 6 | Account is geanonimiseerd. | Status wordt beperkt of niet getoond wanneer die persoonsherleidend zou zijn. | Niet van toepassing. | Geen. |
9. Business rules
| ID | Business rule |
|---|---|
| BR-001 | Beheerder mag geen live meekijken met actieve oefeningen. |
| BR-002 | LastSeenAtUtc is persistente laatst-gezieninformatie, geen volledige sessiehistorie. |
| BR-003 | Online-status is afgeleid en niet autoriserend. |
| BR-004 | Onbekende status mag niet als offline worden geïnterpreteerd. |
| BR-005 | Reguliere login/logout introduceert geen aparte relationele sessietabel. |
| BR-006 | Live-oefeninhoud wordt niet getoond in accountbeheer. |
| BR-007 | Bij logout of deactiveren worden actieve realtimecontexten veilig beëindigd via andere flows. |
10. Datavalidatie
| ID | Validatie |
|---|---|
| VAL-001 | Users.Id moet bestaan. |
| VAL-002 | Actor moet beheerder zijn. |
| VAL-003 | Presence-informatie wordt server-side opgehaald. |
| VAL-004 | Client mag online-status niet aanleveren als waarheid. |
| VAL-005 | Live-oefendata moet uit het readmodel verwijderd blijven. |
| VAL-006 | Null LastSeenAtUtc moet expliciet kunnen worden weergegeven. |
11. Datamutaties en events
| Onderdeel | Mutatie / event |
|---|---|
| Geen domeinmutatie | Online-status bekijken wijzigt geen data. |
| Geen lifecycle-event | Louter raadplegen van status schrijft geen accountlogregel of domeinevent. |
12. Geen datamutaties
| Object / gegeven | Niet wijzigen |
|---|---|
| Users | LastSeenAtUtc wordt niet bijgewerkt door deze beheerraadpleging. |
| LiveViewAudit | Geen live meekijksessie starten. |
| ExerciseRuns | Geen oefenvoortgang lezen of wijzigen. |
| Identity provider | Geen sessie of credential wijzigen. |
| Realtime subscriptions | Geen nieuwe live-meekijksubscription starten. |
13. State diagram
Niet van toepassing. Deze usecase wijzigt geen persistente domeinstatus. De weergegeven toestand is een read-only scherm- of readmodeltoestand en wordt daarom niet als statusmodel opgenomen.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
Niet van toepassing
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Document | Afleiding |
|---|---|
| Functioneel Ontwerp | Accountbeheer toont online-indicatie en LastSeen voor support, maar beheerder kan niet live meekijken. |
| Technisch Ontwerp | Technisch Ontwerp: identiteit en accountlifecycle, autorisatie, logging en foutafhandeling en privacy en anonimisering beschrijven de technische uitwerking. Presence-readmodel combineert Users.LastSeenAtUtc met realtime aanwezigheid zonder sessietabel. |
| Software Requirements Specification | SRS moet het verschil tussen online-indicatie en live meekijken expliciet vastleggen. |
| Database | Leest Users.LastSeenAtUtc; geen mutatie of sessietabel. |
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-008-REQ-001 | SRS-RDM-001 SRS-RDM-004 SRS-ADM-001 AC-RDM-001 AC-RDM-004 AC-ADM-001 | Een beheerder LastSeenAtUtc kunnen tonen |
UC-BEH-ACC-008-REQ-002 | SRS-RDM-001 SRS-ADM-001 AC-RDM-001 AC-ADM-001 | Online-status als afgeleide indicatie kunnen tonen wanneer beschikbaar |
UC-BEH-ACC-008-REQ-003 | SRS-ADM-001 AC-ADM-001 | Onbekende online-status onderscheiden van offline |
UC-BEH-ACC-008-REQ-004 | SRS-ACC-002 SRS-ADM-002 SRS-ADM-001 SRS-LIVE-001 AC-ACC-002 AC-ADM-002 AC-ADM-001 AC-LIVE-001 | Bij accountbeheer geen live-oefeninhoud tonen |
UC-BEH-ACC-008-REQ-005 | SRS-ADM-001 AC-ADM-001 | Voor reguliere sessies geen domeinsessietabel vereisen |
UC-BEH-ACC-008-REQ-006 | SRS-AUTH-001 SRS-ADM-001 AC-AUTH-001 AC-ADM-001 | Online-status server-side bepalen |
UC-BEH-ACC-008-REQ-007 | SRS-ACC-002 SRS-ADM-002 SRS-ADM-001 AC-ACC-002 AC-ADM-002 AC-ADM-001 | Accountonline-informatie read-only houden |