UC-DOC-LLN-008 - Autorisatiewijziging aan leerling communiceren
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-LLN-008 |
| Naam | Autorisatiewijziging aan leerling communiceren |
| 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-005, UC-DOC-LLN-006, UC-DOC-LLN-007, UC-GEN-MSG-001, UC-GEN-MSG-003, 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 OefenHub een leerling informeert over een wijziging in niveau-autorisatie. De communicatie verloopt via het centrale systeemberichtendomein, zonder dat de docent een privébericht opstelt of dat deze usecase de autorisatiewijziging zelf uitvoert.
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
- Ontvangen van een autorisatiewijziging vanuit individuele of bulkflows.
- Bepalen welke leerling geïnformeerd moet worden.
- Aanmaken van een systeembericht met veilige contextomschrijving en, waar codegedreven beschikbaar, een route naar de relevante leerlingcontext.
- Correct omgaan met leerlingen die op dat moment in een actieve oefenrun zitten.
- Afleiden van ongelezenstatus en headerbadge volgens het berichtendomein.
- Vastleggen dat de communicatie bij de autorisatiewijziging hoort.
3.2 Buiten scope
- Toekennen of intrekken van de autorisatie zelf.
- Opstellen van een privébericht door de docent.
- Aanmaken van relatie-uitnodigingen.
- Tonen van de volledige mailbox of het openen van het systeembericht.
- Tonen van systeemnotificaties op de frontpage.
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
Een niveau-autorisatie is door een docent toegevoegd of ingetrokken via een individuele of bulkflow.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Systeem | Autorisatieflow | Ontvangt succesvolle autorisatiewijziging | Start communicatieafhandeling | StudentUserId, TeacherLevelId, wijzigingstype |
| 2 | Systeem | Communicatieservice | Controleert of leerling intern account bestaat | Bepaalt ontvanger | Users.Id |
| 3 | Systeem | Berichtensjabloon | Bepaalt onderwerp en type | Gebruikt systeemberichttemplate | Geen vrije docenttekst |
| 4 | Systeem | Contextservice | Bepaalt veilige berichtcontext | Gebruikt tekstuele context of bestaande veilige route | Geen losse ActionUrl |
| 5 | Systeem | Database | Maakt systeembericht aan | Bericht staat ongelezen in mailbox | SystemMessages.RecipientUserId |
| 6 | Systeem | Realtime/badge | Bepaalt of directe badge/notify zichtbaar mag zijn | Houdt rekening met actieve oefenrun | Leerling mag niet gestoord worden tijdens oefening |
| 7 | Frontend | Header/mailbox | Toont ongelezenstatus wanneer toegestaan | Badge wordt afgeleid uit berichtstatus | Readmodel uit berichtendomein |
| 8 | Leerling | Berichtenoverzicht | Kan bericht op een volgend moment openen | Vervolggedrag hoort bij generiek berichten | UC-GEN-MSG-003 |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Ontvanger bestaat niet of is geanonimiseerd | Systeem maakt geen gebruikersgericht systeembericht en logt de situatie waar nodig technisch. | Niet van toepassing | Geen SystemMessage |
| ALT-002 | 3 | Geen specifiek sjabloon beschikbaar | Systeem gebruikt generieke autorisatiewijzigingscommunicatie of blokkeert volgens sjabloonregels. | Niet van toepassing | Geen of SystemMessage |
| ALT-003 | 4 | Er is geen klikbare vervolgcontext nodig | Systeem maakt een informatief systeembericht zonder losse URL of niet-ondersteunde domeinlink. | Niet van toepassing | SystemMessage |
| ALT-004 | 6 | Leerling zit actief in een oefenrun | Systeem creëert het bericht, maar directe verstoring of popup wordt uitgesteld of verborgen volgens leerling/oefenregels. | Niet van toepassing | SystemMessage |
| ALT-005 | 5 | Berichtaanmaak faalt na autorisatiemutatie | Systeem logt de fout en maakt de autorisatiemutatie niet ongedaan tenzij de transactiegrens dit vereist. | Niet van toepassing | Afhankelijk van transactiegrens |
| ALT-006 | 8 | Leerling opent bericht na ingetrokken of gewijzigde context | Bericht blijft bestaan; vervolgactie wordt veilig herbeoordeeld. | Niet van toepassing | ReadAtUtc mogelijk via berichtenusecase |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Communicatie over niveau-autorisatie verloopt via systeemberichten, niet via privéberichten. |
| BR-002 | Deze usecase voert geen autorisatiewijziging uit maar communiceert het resultaat daarvan. |
| BR-003 | Een systeembericht vereist een bestaande interne ontvanger. |
| BR-004 | Tijdens een actieve oefenrun mag zichtbare notificatie worden beperkt zonder de ongelezenstatus te verliezen. |
| BR-005 | Het openen of lezen van het systeembericht wijzigt de autorisatie niet. |
| BR-006 | De inhoudelijke bron voor systeemberichttemplates ligt in het generieke berichtendomein en templatebeheer. |
| BR-007 | Wanneer het bericht een route of contextactie toont, moet de frontend de toegang bij openen opnieuw server-side controleren. |
| BR-008 | Communicatie mag geen informatie over andere docenten of andere docentcontexten lekken. |
| 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 |
|---|---|---|---|
| 5 | Create | SystemMessages | Systeembericht wordt aangemaakt voor de leerling. |
| 6 | Event | AuthorizationChangeMessageCreated | Communicatie over autorisatiewijziging is aangemaakt. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| TeacherStudentLevelAccess | De autorisatie is al in een eerdere usecase gewijzigd. |
| PrivateMessageThreads | Er wordt geen privéberichtthread aangemaakt. |
| UserRelationships | Relaties worden niet aangepast. |
| ExerciseRuns | Oefenruns worden niet gewijzigd. |
| SystemNotifications | Systeemnotificaties zijn een ander domein dan mailbox-systeemberichten. |
13. State diagram
Deze usecase wijzigt de niveau-autorisatie niet. De relevante toestand is de communicatieafhandeling rond een reeds uitgevoerde autorisatiewijziging.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
16.1 Systeembericht na autorisatiewijziging
16.2 Geen geldige ontvanger
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-008-001 | SRS-AUTH-001 SRS-MSG-001 SRS-CAT-001 SRS-LRN-009 SRS-TCH-003 AC-AUTH-001 AC-MSG-001 AC-CAT-001 AC-LRN-009 AC-TCH-003 | Leerlingen via systeemberichten kunnen informeren over niveau-autorisatiewijzigingen |
REQ-UC-DOC-LLN-008-002 | SRS-AUTH-001 SRS-MSG-001 SRS-TCH-001 AC-AUTH-001 AC-MSG-001 AC-TCH-001 | Voor autorisatiewijzigingscommunicatie geen privéberichtthread vereisen |
REQ-UC-DOC-LLN-008-003 | SRS-MSG-002 SRS-SHR-002 SRS-SHR-005 SRS-TCH-001 AC-MSG-002 AC-SHR-002 AC-SHR-005 AC-TCH-001 | Alleen systeemberichten aanmaken voor bestaande interne ontvangers |
REQ-UC-DOC-LLN-008-004 | SRS-MSG-001 SRS-LRN-009 SRS-TCH-001 AC-MSG-001 AC-LRN-009 AC-TCH-001 | Directe verstoring tijdens actieve oefenruns kunnen beperken zonder het systeembericht te verliezen |
REQ-UC-DOC-LLN-008-005 | SRS-AUTH-001 SRS-MSG-007 SRS-TCH-001 AC-AUTH-001 AC-MSG-007 AC-TCH-001 | Bij openen van een bericht de vervolgcontext server-side opnieuw controleren |
REQ-UC-DOC-LLN-008-006 | SRS-TCH-001 AC-TCH-001 | Voorkomen dat communicatie gegevens over andere docentcontexten lekt |