UC-DOC-LLN-005 - Leerling aan niveau koppelen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-LLN-005 |
| Naam | Leerling aan niveau koppelen |
| 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 gekoppelde leerling toegang geeft tot een niveau binnen de eigen docentcontext. De flow maakt een actieve niveau-autorisatie aan of heractiveert een eerder ingetrokken autorisatie wanneer dat volgens de business rules veilig en eenduidig kan.
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 leerling binnen de eigen docentcontext.
- Selecteren van een niveau waarvoor de docent autorisatiebeheer mag uitvoeren.
- Server-side controleren van docentrol, docent-leerlingrelatie en niveau-eigenaarschap of geldige beheerscontext.
- Aanmaken of activeren van
TeacherStudentLevelAccessvoor de gekozen leerling en het gekozen niveau. - Vastleggen van actor, tijdstip en functionele context van de autorisatiewijziging.
- Voorbereiden van communicatie aan de leerling via de aparte communicatie-usecase.
3.2 Buiten scope
- Aanmaken van een docent-leerlingrelatie.
- Accepteren of afwijzen van relatie-uitnodigingen.
- Wijzigen van niveau-inhoud, categorieën of oefeningen.
- Automatisch kiezen van het actieve niveau in het leerlingprofiel.
- Inhoudelijk tonen van leerlingresultaten.
- Beheerderondersteuning buiten docentcontext.
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 koppelen van een leerling aan een niveau.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Docent | Autorisatiescherm | Selecteert leerling en niveau | Frontend start koppelactie | StudentUserId, TeacherLevelId |
| 2 | Frontend | Routeguard | Stuurt verzoek naar backend | Backend voert server-side controle uit | Clientselectie is niet leidend |
| 3 | Systeem | Autorisatieservice | Controleert actieve docentrol | Blokkeert zonder docentrol | UserRoles, Roles |
| 4 | Systeem | Relatieservice | Controleert actieve docent-leerlingrelatie | Bepaalt of leerling koppelbaar is | UserRelationships.IsActive = true |
| 5 | Systeem | Niveauservice | Controleert niveaucontext | Bepaalt of docent niveau mag beheren | TeacherLevels, eigenaar/beheerscontext |
| 6 | Systeem | Autorisatieservice | Controleert bestaande autorisatie | Voorkomt dubbele actieve koppeling | TeacherStudentLevelAccess |
| 7 | Systeem | Database | Maakt of heractiveert autorisatie | Slaat actieve toegang op | IsActive = true, GrantedAtUtc, GrantedByUserId |
| 8 | Systeem | Audit/eventlaag | Registreert autorisatiewijziging | Legt wijziging herleidbaar vast | StudentLevelAccessGranted |
| 9 | Systeem | Communicatievoorbereiding | Registreert dat leerling geïnformeerd moet worden | Verwijst naar UC-DOC-LLN-008 | Geen SystemMessage in deze usecase |
| 10 | Frontend | Autorisatiescherm | Toont bijgewerkte toestand | Leerling staat als 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 koppelactie. | Niet van toepassing | Geen |
| ALT-002 | 4 | Leerling heeft geen actieve docent-leerlingrelatie met deze docent | Systeem weigert de koppeling en toont geen leerlinggegevens buiten context. | Niet van toepassing | Geen |
| ALT-003 | 5 | Niveau hoort niet bij de beheerscontext van de docent | Systeem blokkeert de koppelactie. | Niet van toepassing | Geen |
| ALT-004 | 6 | Er bestaat al een actieve autorisatie voor dezelfde leerling en hetzelfde niveau | Systeem voert geen dubbele mutatie uit en ververst de bestaande toestand. | Niet van toepassing | Geen |
| ALT-005 | 6 | Er bestaat een eerder ingetrokken autorisatie | Systeem kan een nieuwe actieve autorisatie aanmaken of het record gecontroleerd heractiveren volgens datamodelkeuze. | Niet van toepassing | TeacherStudentLevelAccess |
| ALT-006 | 7 | Opslaan faalt door gelijktijdige wijziging | Systeem breekt transactie af en laat de docent de actuele toestand opnieuw laden. | Niet van toepassing | Rollback |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Een leerling kan alleen aan een niveau worden gekoppeld binnen een actieve docent-leerlingrelatie. |
| BR-002 | Een docent mag alleen autorisaties beheren binnen de eigen toegestane docentcontext. |
| BR-003 | Een collaborator op een niveau krijgt door de collaboratorstatus niet automatisch toegang tot leerlingen of autorisatiebeheer. |
| BR-004 | Voor dezelfde leerling en hetzelfde niveau mag niet meer dan één actieve niveau-autorisatie bestaan binnen dezelfde docentcontext. |
| BR-005 | Nieuw toegevoegde actieve oefeningen binnen het geautoriseerde niveau worden automatisch beschikbaar voor de leerling. |
| BR-006 | Een autorisatiewijziging verandert geen relatie, geen rol en geen profielinstelling. |
| BR-007 | De leerling moet over de autorisatiewijziging geïnformeerd worden via de daarvoor bedoelde communicatieflow. |
| BR-008 | Server-side autorisatiecontrole is leidend; clientselectie of routeparameters mogen geen toegang afdwingen. |
| 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/Create | TeacherStudentLevelAccess | Nieuwe actieve niveau-autorisatie of gecontroleerde heractivatie. |
| 8 | Event | StudentLevelAccessGranted | Niveau-autorisatie is toegekend. |
| 9 | Vervolgactie | AuthorizationChangeCommunicationRequested | Communicatie richting leerling moet worden verwerkt via UC-DOC-LLN-008. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| UserRelationships | De relatie wordt niet aangemaakt of gewijzigd; zij is een voorwaarde. |
| TeacherLevels | Het niveau zelf wordt niet gewijzigd. |
| Exercises | Oefeningen worden niet aangepast; zichtbaarheid volgt afgeleid. |
| UserSettings | Het actieve niveau van de leerling wordt niet automatisch gewijzigd. |
| PrivateMessages | Autorisatiecommunicatie gebruikt geen privébericht. |
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 aan niveau koppelen
16.2 Dubbele koppeling voorkomen
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-005-001 | SRS-REL-001 SRS-CAT-001 SRS-LRN-009 SRS-TCH-003 AC-REL-001 AC-CAT-001 AC-LRN-009 AC-TCH-003 | Een docent alleen leerlingen aan een niveau laten koppelen binnen een actieve docent-leerlingrelatie |
REQ-UC-DOC-LLN-005-002 | SRS-AUTH-001 SRS-CAT-001 SRS-TCH-002 AC-AUTH-001 AC-CAT-001 AC-TCH-002 | Server-side controleren of de docent het gekozen niveau mag beheren |
REQ-UC-DOC-LLN-005-003 | SRS-AUTH-001 SRS-CAT-001 SRS-LRN-009 SRS-TCH-003 AC-AUTH-001 AC-CAT-001 AC-LRN-009 AC-TCH-003 | Dubbele actieve autorisaties voor dezelfde leerling en hetzelfde niveau voorkomen |
REQ-UC-DOC-LLN-005-004 | SRS-AUTH-001 SRS-TCH-001 SRS-NFR-AUD-001 AC-AUTH-001 AC-TCH-001 AC-NFR-AUD-001 | Een succesvolle koppeling vastleggen in TeacherStudentLevelAccess of het equivalente autorisatiemodel |
REQ-UC-DOC-LLN-005-005 | SRS-AUTH-001 SRS-TCH-001 SRS-NFR-AUD-001 AC-AUTH-001 AC-TCH-001 AC-NFR-AUD-001 | Autorisatiewijzigingen herleidbaar vastleggen met actor en tijdstip |
REQ-UC-DOC-LLN-005-006 | SRS-MSG-001 SRS-LRN-001 SRS-TCH-001 AC-MSG-001 AC-LRN-001 AC-TCH-001 | Na succesvolle koppeling communicatie richting de leerling kunnen starten via de centrale systeemberichtenflow |