UC-DOC-LLN-006 - Leerling van niveau ontkoppelen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-LLN-006 |
| Naam | Leerling van niveau ontkoppelen |
| Domein | Docent |
| Subdomein | Leerlingen en niveau-autorisaties |
| Primaire actor | Docent |
| Secundaire actor(en) | Systeem, Leerling |
| Rolcontext | Actieve docentcontext met geldige docentrol, relevante docent-leerlingrelatie en toegestane niveaucontext |
| Betrokken schermen | Docent - Leerlingen, Docent - Autorisaties, Docent - Niveau-autorisaties beheren |
| Gerelateerde usecases | UC-DOC-LLN-001, UC-DOC-LLN-002, UC-DOC-LLN-003, UC-DOC-LLN-004, UC-DOC-LLN-008, UC-LLN-TOEG-001, UC-LLN-TOEG-002, UC-LLN-TOEG-003 |
| Primaire entiteiten | Users, UserRoles, Roles, UserRelationships, TeacherLevels, TeacherStudentLevelAccess |
| Secundaire entiteiten / events | SystemMessages, autorisatie-events, leerlingtoegangs-readmodel, audit/logging |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een docent een bestaande niveau-autorisatie intrekt. De leerling verliest daardoor nieuwe toegang tot het betreffende niveau binnen deze docentcontext, terwijl afgeronde geschiedenis historisch beschikbaar blijft volgens de resultaat- en geschiedenisdomeinen.
De usecase blijft bewust binnen het docentdomein. Relatievorming, profielbeheer, accounttoegang, leerlingfrontpagegedrag en generieke berichtafhandeling worden niet opnieuw als bronwaarheid beschreven. Deze flow gebruikt die domeinen alleen als randvoorwaarde of vervolgcontext.
Alle beslissingen die zichtbaarheid of wijzigbaarheid bepalen, worden server-side opnieuw gecontroleerd. Een selectie in de frontend, een oude route of een eerder geladen readmodel mag nooit zelfstandig bepalen dat een docent een leerling of niveau mag wijzigen.
3. Scope
3.1 Binnen scope
- Selecteren van een bestaande actieve niveau-autorisatie.
- Server-side controleren dat de docent deze autorisatie mag intrekken.
- Administratief deactiveren of intrekken van de autorisatie.
- Vastleggen van actor, tijdstip en optionele reden of context.
- Voorkomen dat nieuwe starts of hervattingen buiten geldige toegang doorgaan.
- Voorbereiden van communicatie aan de leerling via de aparte communicatie-usecase.
3.2 Buiten scope
- Verwijderen van leerlinggeschiedenis of afgeronde oefenruns.
- Verwijderen of beëindigen van de docent-leerlingrelatie.
- Aanpassen van categorieën, oefeningen of niveaus.
- Afhandelen van accountverwijdering of anonimisering.
- Live-meekijksessies inhoudelijk beheren buiten bestaande realtime regels.
3.3 DRY-afbakening
- De docent-leerlingrelatie zelf blijft bronhoudend in het generieke relatiedomein.
- De leerlingzijde van zichtbaarheid en starten van oefeningen blijft bronhoudend in het leerlingdomein.
- Systeemberichten worden functioneel gebruikt als communicatiekanaal, maar de mailbox- en leesstatusregels blijven bronhoudend in het generieke berichtendomein.
- Collaboratorrechten geven geen automatische toegang tot leerlingen, resultaten, geschiedenis of live meekijken.
- Niveau-autorisaties zijn gescheiden van rollen, relaties en profielinstellingen.
- Historische resultaten worden niet herschreven door autorisatiewijzigingen.
- Samenvattingen, lijsten en aantallen zijn afgeleide readmodelwaarden en vormen geen tweede bron van waarheid.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is succesvol ingelogd. |
| PRE-002 | De gebruiker heeft een actieve docentrol. |
| PRE-003 | De OefenHub-sessiecontext is server-side opgebouwd. |
| PRE-004 | De docentcontext en relevante niveaucontext zijn beschikbaar. |
| PRE-005 | De betrokken leerling valt binnen een actieve docent-leerlingrelatie wanneer een leerlingmutatie wordt uitgevoerd. |
| PRE-006 | De backend kan actuele autorisatiegegevens ophalen voordat een wijziging wordt verwerkt. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De autorisatie- of communicatiehandeling is uitgevoerd of veilig geblokkeerd. |
| POST-002 | De docent heeft geen gegevens buiten de eigen docentcontext gewijzigd of gezien. |
| POST-003 | Alle uitgevoerde mutaties zijn herleidbaar vastgelegd waar dat voor deze flow geldt. |
| POST-004 | Afgeleide leerlingtoegang kan na de mutatie opnieuw correct worden bepaald. |
| POST-005 | Vervolgcommunicatie of vervolgtoegang wordt in de daarvoor bedoelde usecases afgehandeld. |
6. Trigger
De docent kiest binnen het autorisatiescherm of bulk-autorisatiescherm voor het ontkoppelen van een leerling van een niveau.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Docent | Autorisatiescherm | Selecteert actieve niveau-autorisatie | Frontend start ontkoppelactie | StudentUserId, TeacherLevelId |
| 2 | Frontend | Routeguard | Stuurt verzoek naar backend | Backend voert server-side controle uit | Clientstate is niet leidend |
| 3 | Systeem | Autorisatieservice | Controleert actieve docentrol | Blokkeert zonder docentrol | UserRoles, Roles |
| 4 | Systeem | Relatieservice | Controleert actieve docent-leerlingrelatie | Bepaalt toegestane context | UserRelationships |
| 5 | Systeem | Autorisatieservice | Laadt actieve autorisatie | Valideert intrekbaarheid | TeacherStudentLevelAccess.IsActive = true |
| 6 | Systeem | Niveauservice | Controleert niveaucontext | Bepaalt of docent autorisatie mag intrekken | TeacherLevels |
| 7 | Systeem | Database | Trekt autorisatie in | Markeert toegang als niet-actief | IsActive = false, RevokedAtUtc, RevokedByUserId |
| 8 | Systeem | Audit/eventlaag | Registreert intrekking | Legt wijziging herleidbaar vast | StudentLevelAccessRevoked |
| 9 | Systeem | Toegangsmodel | Maakt nieuwe toegang ongeldig | Nieuwe starts worden server-side geblokkeerd | Leerlingtoegang afgeleid |
| 10 | Systeem | Communicatievoorbereiding | Registreert dat leerling geïnformeerd moet worden | Verwijst naar UC-DOC-LLN-008 | Geen SystemMessage in deze usecase |
| 11 | Frontend | Autorisatiescherm | Toont bijgewerkte toestand | Leerling staat niet langer gekoppeld aan niveau | Readmodel vernieuwd |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 3 | Gebruiker heeft geen actieve docentrol | Systeem blokkeert de intrekking. | Niet van toepassing | Geen |
| ALT-002 | 4 | Leerling valt niet binnen docentcontext | Systeem weigert de actie. | Niet van toepassing | Geen |
| ALT-003 | 5 | Er is geen actieve autorisatie om in te trekken | Systeem voert geen mutatie uit en toont de actuele toestand. | Niet van toepassing | Geen |
| ALT-004 | 6 | Niveau hoort niet bij toegestane beheerscontext | Systeem blokkeert de intrekking. | Niet van toepassing | Geen |
| ALT-005 | 7 | Leerling heeft een actieve oefenrun binnen dit niveau | Intrekking verandert geen afgeronde data; hervatten wordt bij vervolgtoegang server-side opnieuw gecontroleerd. | Niet van toepassing | TeacherStudentLevelAccess |
| ALT-006 | 7 | Gelijktijdige wijziging heeft autorisatie al ingetrokken | Systeem voorkomt dubbele intrekking en ververst het readmodel. | Niet van toepassing | Geen of idempotente update |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Intrekken van niveau-autorisatie verwijdert geen docent-leerlingrelatie. |
| BR-002 | Intrekken van niveau-autorisatie verwijdert geen afgeronde oefenruns, geschiedenis of PDF-beschikbaarheid waar die historisch toegestaan blijft. |
| BR-003 | Na intrekking mag de leerling geen nieuwe oefening starten binnen dat niveau via deze docentcontext. |
| BR-004 | Of een niet-afgeronde run nog hervatbaar is, wordt bij openen opnieuw server-side bepaald door de leerlingtoegangsusecases. |
| BR-005 | Autorisatie-intrekking moet herleidbaar vastliggen met actor en tijdstip. |
| BR-006 | Een docent mag alleen eigen of beheerscontextgebonden autorisaties intrekken. |
| BR-007 | Communicatie richting leerling loopt via systeemberichten en niet via privéberichten. |
| BR-008 | Clientstate mag een ingetrokken autorisatie niet alsnog bruikbaar maken. |
| BR-009 | Autorisatiebeheer is altijd docentcontextgebonden en mag geen informatie uit andere docentcontexten lekken. |
| BR-010 | Alle autorisatiekritieke beslissingen worden server-side genomen. |
| BR-011 | Een wijziging in niveau-autorisatie is geen wijziging van leerlingrol, accountstatus of relatie. |
| BR-012 | De actuele toestand na een mutatie is leidend boven eerder geladen clientstate. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Docentrol | Moet actief zijn op het moment van de handeling. |
| Docentcontext | Wordt server-side bepaald uit sessie, rollen, relaties en niveaucontext. |
| StudentUserId | Moet binnen de actieve docent-leerlingcontext vallen wanneer een leerling wordt gewijzigd. |
| TeacherLevelId | Moet bestaan, actief zijn en binnen de toegestane docentcontext vallen. |
| TeacherStudentLevelAccess | Mag niet leiden tot dubbele actieve autorisaties voor dezelfde context. |
| Bulkselectie | Mag alleen geldige, dedupliceerde leerlingen bevatten. |
| Communicatiecontext | Mag geen gegevens over andere docenten of andere autorisatiecontexten bevatten. |
| Routeparameters | Mogen geen wijziging afdwingen zonder server-side hercontrole. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 7 | Update | TeacherStudentLevelAccess | Autorisatie wordt ingetrokken of niet-actief gemaakt. |
| 8 | Event | StudentLevelAccessRevoked | Niveau-autorisatie is ingetrokken. |
| 10 | Vervolgactie | AuthorizationChangeCommunicationRequested | Communicatie richting leerling moet worden verwerkt via UC-DOC-LLN-008. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| ExerciseRuns | Afgeronde en bestaande runs worden niet verwijderd. |
| ExerciseRunProgress | Voortgang wordt niet herschreven in deze usecase. |
| UserRelationships | Docent-leerlingrelatie blijft bestaan. |
| SystemMessages | Het bericht zelf wordt pas in de communicatie-usecase aangemaakt. |
| PrivateMessageThreads | Geen privéberichtthread wordt aangemaakt. |
13. State diagram
Deze usecase raakt de lifecycle van een niveau-autorisatie of de communicatie daarover. De autorisatie kent functioneel de toestanden niet aanwezig, actief en ingetrokken.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
16.1 Leerling van niveau ontkoppelen
16.2 Autorisatie bestaat niet meer
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| Niet van toepassing | Gehele usecase | Deze flow gebruikt geen domeinspecifieke popupregister-popup. Routeguard-, validatie-, lege-staat- en niet-beschikbaarafhandeling verlopen via componentmelding of bestaande generieke foutafhandeling. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Legt vast hoe docenten niveau-autorisaties voor gekoppelde leerlingen beheren binnen de eigen docentcontext. |
| Technisch Ontwerp | Technisch Ontwerp: autorisatie en contextcontrole, technische rolflows, relatiebeheer en readmodels en tellers beschrijven de technische uitwerking. Vertaalt de server-side validaties, transacties, idempotentie en communicatiekoppeling naar services en databasebewerkingen. |
| Software Requirements Specification | Leidt requirements af voor contextcontrole, autorisatiemutaties, auditbaarheid, communicatie en afscherming van andere docentcontexten. |
| Database-informatie | Bepaalt aanscherpingen rond TeacherStudentLevelAccess, SystemMessages en afgeleide leerlingtoegang. |
| Ontwerpbronnen | Raakt business rules, autorisatiematrix, command-register, event-register en usecase-matrices voor muterende autorisatie- en communicatieflows. |
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-DOC-LLN-006-001 | SRS-AUTH-001 SRS-CAT-001 SRS-TCH-002 AC-AUTH-001 AC-CAT-001 AC-TCH-002 | Een actieve niveau-autorisatie kunnen intrekken binnen de toegestane docentcontext |
REQ-UC-DOC-LLN-006-002 | SRS-AUTH-001 SRS-TCH-001 AC-AUTH-001 AC-TCH-001 | Voorkomen dat een docent autorisaties buiten de eigen context intrekt |
REQ-UC-DOC-LLN-006-003 | SRS-LRN-010 SRS-TCH-004 SRS-NFR-AUD-001 AC-LRN-010 AC-TCH-004 AC-NFR-AUD-001 | Bij intrekking geen afgeronde oefenruns of geschiedenis verwijderen |
REQ-UC-DOC-LLN-006-004 | SRS-AUTH-001 SRS-CAT-001 SRS-TCH-002 AC-AUTH-001 AC-CAT-001 AC-TCH-002 | Nieuwe toegang tot het ingetrokken niveau server-side blokkeren |
REQ-UC-DOC-LLN-006-005 | SRS-TCH-001 SRS-NFR-AUD-001 AC-TCH-001 AC-NFR-AUD-001 | De intrekking herleidbaar vastleggen met actor en tijdstip |
REQ-UC-DOC-LLN-006-006 | SRS-MSG-001 SRS-LRN-001 SRS-TCH-001 AC-MSG-001 AC-LRN-001 AC-TCH-001 | Communicatie richting leerling kunnen starten via de centrale systeemberichtenflow |