UC-LLN-TOEG-003 — Oefeningstoegang controleren bij openen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-LLN-TOEG-003 |
| Naam | Oefeningstoegang controleren bij openen |
| Domein | Leerling / Oefenaanbod en toegang |
| Primaire actor | Leerling |
| Secundaire actor(en) | OefenHub frontend, OefenHub backend, routeguard, autorisatielaag, database, oefeningstartcomponent |
| Rolcontext | Ingelogde leerling die via lijst, frontpageblok, directe URL of oude browserstate een oefening probeert te openen. |
| Betrokken schermen | Oefeningroute, oefening-startpagina, routeguard, fout-/niet-beschikbaarafhandeling, terugroute naar oefenaanbod. |
| Gerelateerde usecases | UC-LLN-TOEG-001 — Beschikbare categorieën bekijken; UC-LLN-TOEG-002 — Beschikbare oefeningen bekijken; UC-LLN-TOEG-004 — Toegang vervalt door ingetrokken autorisatie; UC-LLN-OEF-001 — Oefening-startpagina openen; UC-LLN-OEF-003 — Nieuwe oefening starten |
| Primaire entiteiten | Users, UserSettings, TeacherLevels, TeacherLevelCategories, TeacherLevelCategoryExercises, Exercises, TeacherStudentLevelAccess, UserRelationships |
| Secundaire entiteiten / events | ExerciseModules, ExerciseRuns |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft de verplichte server-side toegangscontrole wanneer een leerling een oefening probeert te openen. De route kan ontstaan vanuit een actuele oefeningenlijst, een frontpageblok, een directe link, browsergeschiedenis, een systeembericht of oude clientstate. Geen van die routes is op zichzelf autorisatiebewijs.
De backend controleert opnieuw of de gebruiker leerling is, of de actieve niveaucontext geldig is, of de categorie en oefening binnen die context liggen en of de oefening op dat moment startbaar is. Pas na succesvolle controle mag de oefening-startpagina of de vervolgflow voor hervatten/starten worden getoond. Als één van de controles faalt, krijgt de leerling geen inhoudelijke oefenconfiguratie of vraagdata.
Deze usecase maakt zelf nog geen nieuwe run aan. Zij is de poort tussen zichtbaarheid en oefenuitvoering. De oefeningstartpagina, hervatten en nieuwe run genereren worden in de oefenflows uitgewerkt.
3. Scope
Deze usecase omvat wel:
- server-side valideren van oefeningroute en leerlingcontext
- blokkeren van directe URL-toegang zonder geldige autorisatie
- controleren van actief niveau, categorie, oefenkoppeling en oefening
- controleren of de oefening binnen open of geautoriseerde context valt
- voorkomen dat oude clientcache een oefening startbaar maakt
- veilig terugleiden naar oefenaanbod of bestaande contextflow bij blokkade
- geen vraagdata of modulepayload vrijgeven bij geweigerde toegang
Deze usecase omvat niet:
- opbouwen van de oefening-startpagina zelf
- genereren van nieuwe exercise runs
- hervatten van bestaande exercise runs
- beantwoorden van vragen
- resultaatweergave
- docentbeheer van autorisaties
- maken van systeemberichten over ingetrokken toegang
- wijzigen van selected level
DRY-afbakening voor deze usecase: beheer van niveaus, categorieën, oefeningen, relaties en autorisaties blijft bij de daarvoor bedoelde docent-, beheerder-, profiel- en relatieusecases. Deze usecase gebruikt de uitkomst daarvan als toegangsvoorwaarde en maakt die processen niet opnieuw bronhoudend.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De leerling probeert een oefeningroute of oefeningstartpunt te openen. |
| PRE-002 | De backend kan de routecontext koppelen aan niveau, categorie en oefening. |
| PRE-003 | De ingelogde gebruiker kan server-side worden geïdentificeerd. |
| PRE-004 | De actuele autorisatiestatus is beschikbaar. |
| PRE-005 | Routeguard is actief voor beveiligde leerlingroutes. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Bij geldige toegang mag de oefeningstartcontext worden geladen. |
| POST-002 | Bij geweigerde toegang wordt geen oefeninhoud, vraagdata of modulepayload vrijgegeven. |
| POST-003 | Er is geen nieuwe exercise run aangemaakt door alleen toegang te controleren. |
| POST-004 | Oude of gemanipuleerde routecontext is niet als autorisatiebron gebruikt. |
| POST-005 | De leerling krijgt een veilige terugvalroute naar beschikbaar oefenaanbod of account-/niveaucontext. |
6. Trigger
De usecase start wanneer een leerling een oefening probeert te openen via klik, directe route, frontpageblok, browsergeschiedenis of een verouderde clientstate.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Leerling | Oefeningenlijst / directe route | Opent een oefening. | Frontend navigeert naar de oefeningroute. | Route bevat context, geen autorisatie. |
| 2 | Frontend | Routeguard | Vraagt backend om toegang tot oefeningcontext. | Backend start volledige controle. | Geen client-only besluit. |
| 3 | Backend | Sessielaag | Controleert ingelogde gebruiker en leerlingrol. | Alleen leerlingcontext gaat verder. | Server-side sessie. |
| 4 | Backend | Niveaucontext | Valideert geselecteerd of routegebonden niveau. | Niveau moet bestaan, actief en toegankelijk zijn. | Open niveau of autorisatie. |
| 5 | Backend | Categoriecontext | Controleert dat categorie actief bij het niveau hoort. | Ongeldige categorie wordt geblokkeerd. | TeacherLevelCategories. |
| 6 | Backend | Oefenkoppeling | Controleert dat oefening actief in deze categoriecontext is gekoppeld. | Alleen actieve koppeling gaat verder. | TeacherLevelCategoryExercises. |
| 7 | Backend | Oefening | Controleert dat de oefening actief en regulier bruikbaar is. | Oefeningen in onderhoud worden geblokkeerd. | Exercises.IsActive. |
| 8 | Backend | Modulecontext | Controleert of de technische module beschikbaar is voor uitvoering. | Onbruikbare module blokkeert startcontext. | ExerciseModules. |
| 9 | Backend | Oefeningstartcontext | Bouwt minimale toegestane startcontext op. | Frontend mag startpagina laden. | Geen vraagpayload voor start. |
| 10 | Frontend | Oefening-startpagina | Toont startcontext. | Vervolg naar oefenflow. | Nieuwe run ontstaat pas bij startactie. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 3 | Gebruiker is niet ingelogd. | Routeguard start loginflow of publieke context. | Geen popupregister-popup. | Geen. |
| ALT-002 | 3 | Gebruiker is geen leerling. | Routeguard blokkeert leerlingoefeningroute. | Generieke toegangafhandeling. | Geen. |
| ALT-003 | 4 | Niveau is niet meer toegankelijk. | Route wordt geblokkeerd en gebruiker wordt naar toegankelijke context geleid. | Geen domeinpopup. | Geen. |
| ALT-004 | 5 | Categorie is niet gekoppeld aan het niveau. | Backend weigert oefeningcontext. | Niet-beschikbaarafhandeling. | Geen. |
| ALT-005 | 6 | Oefening is niet actief gekoppeld in deze categorie. | Backend weigert oefeningcontext. | Niet-beschikbaarafhandeling. | Geen. |
| ALT-006 | 7 | Oefening staat in onderhoud. | Backend weigert leerlingstart. | Niet-beschikbaarafhandeling. | Geen. |
| ALT-007 | 8 | Technische module is niet beschikbaar. | Backend weigert start en toont veilige terugval. | Niet-beschikbaarafhandeling. | Eventuele technische logging. |
| ALT-008 | 9 | Routecontext is inconsistent of gemanipuleerd. | Backend behandelt de route als ongeldig en geeft geen data vrij. | Geen. | Eventuele security logging. |
| ALT-009 | 10 | Toegang verandert tussen lijst en openen. | Backend gebruikt actuele status en blokkeert indien nodig. | Geen. | Geen. |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Elke poging om een oefening te openen moet server-side worden gecontroleerd. |
| BR-002 | Een zichtbare link of oude route is geen bewijs van toegang. |
| BR-003 | Oefeningstoegang vereist een geldige leerlingrol. |
| BR-004 | Oefeningstoegang vereist een actieve en toegankelijke niveaucontext. |
| BR-005 | Oefeningstoegang vereist een actieve categorie- en oefenkoppeling binnen dezelfde context. |
| BR-006 | Een oefening in onderhoud mag niet door een leerling worden gestart. |
| BR-007 | Bij geweigerde toegang mag geen moduleconfiguratie of vraagdata worden vrijgegeven. |
| BR-008 | Deze usecase maakt geen nieuwe run aan. |
| BR-009 | Controle moet plaatsvinden vlak voor het laden van de startcontext. |
| BR-010 | Bij race conditions wint de actuele backendstatus boven de eerder getoonde lijst. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Routecontext | Moet herleidbaar zijn tot één niveau-categorie-oefeningcontext. |
| UserId | Komt uit server-side sessie. |
| Rol | Moet Leerling zijn. |
| Niveau | Moet actief en toegankelijk zijn. |
| Categorie | Moet actief aan het niveau gekoppeld zijn. |
| Oefenkoppeling | Moet actief zijn. |
| Oefening | Moet actief zijn en niet in onderhoud staan. |
| Module | Moet beschikbaar zijn voor leerlinguitvoering. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 3 | Read | Users / sessiecontext | Gebruiker en leerlingrol worden bepaald. |
| 4 | Read | TeacherLevels, TeacherStudentLevelAccess, UserRelationships | Niveaucontext en toegang worden gecontroleerd. |
| 5 | Read | TeacherLevelCategories | Categoriecontext wordt gecontroleerd. |
| 6 | Read | TeacherLevelCategoryExercises | Oefenkoppeling wordt gecontroleerd. |
| 7 | Read | Exercises | Oefeningstatus wordt gecontroleerd. |
| 8 | Read | ExerciseModules | Technische bruikbaarheid wordt gecontroleerd. |
Deze usecase kent geen persistente domeinevents. Securitylogging kan technisch plaatsvinden, maar is geen functionele eventmutatie binnen deze usecase.
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
ExerciseRuns | Run wordt pas aangemaakt bij start nieuwe oefening. |
UserSettings | Toegangscontrole wijzigt geen geselecteerd niveau. |
TeacherStudentLevelAccess | Controle kent geen autorisatie toe. |
SystemMessages | Blokkade maakt geen systeembericht. |
Exercises | Oefening wordt niet gewijzigd. |
ExerciseHistory | Geen docent- of beheerwijziging. |
13. State diagram
Niet van toepassing. Deze usecase raakt geen persistent statusobject met een eigen lifecycle. Toegang en zichtbaarheid worden afgeleid uit actuele niveaucontext, autorisaties, actieve relaties en contentstatussen.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| Niet van toepassing | Niet van toepassing | Deze usecase gebruikt routeguard-, leegstaat- of componentgedrag en geen popupregister-popup. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Functioneel Ontwerp beschrijft zichtbaar oefenaanbod, niveaucontext, categorie-/oefeningtoegang en veilige blokkades. |
| Technisch Ontwerp | Technisch Ontwerp: autorisatie en contextcontrole, oefencatalogus, readmodels en frontend-routing beschrijft de technische afbakening, server-side brondata, autorisatie en UI-compositie voor deze usecase. |
| Software Requirements Specification | Software Requirements Specification bevat centrale eisen en acceptatiecriteria voor aanbodfiltering, server-side autorisatie, blokkades en geen ongewenste datamutaties. |
| Database-informatie | Database-informatie blijft bron voor catalogus-, autorisatie- en soft-linkrelaties waarmee zichtbaar aanbod server-side wordt bepaald. |
| Ontwerpbronnen | Ontwerpbronnen bevatten aanvullende businessregels voor oefenaanbod, niveaus, categorieën en autorisatiegrenzen. |
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-LLN-TOEG-003-001 | SRS-AUTH-001 SRS-LRN-009 AC-AUTH-001 AC-LRN-009 | Iedere oefeningroute server-side controleren voordat oefencontext wordt geladen |
REQ-UC-LLN-TOEG-003-002 | SRS-AUTH-001 SRS-LRN-009 SRS-CNT-004 AC-AUTH-001 AC-LRN-009 AC-CNT-004 | Directe URL-toegang blokkeren wanneer de leerling geen actuele toegang heeft |
REQ-UC-LLN-TOEG-003-003 | SRS-AUTH-001 SRS-LRN-009 SRS-MOD-003 AC-AUTH-001 AC-LRN-009 AC-MOD-003 | Bij geweigerde toegang geen modulepayload of vraagdata vrijgeven |
REQ-UC-LLN-TOEG-003-004 | SRS-LRN-009 AC-LRN-009 | Actuele backendstatus boven oude frontendcache laten gaan |
REQ-UC-LLN-TOEG-003-005 | SRS-AUTH-001 SRS-LRN-009 AC-AUTH-001 AC-LRN-009 | Oefeningen in onderhoud blokkeren voor leerlingen |
REQ-UC-LLN-TOEG-003-006 | SRS-ACC-003 SRS-ACC-005 SRS-CAT-001 SRS-LRN-009 SRS-NFR-ACC-001 AC-ACC-003 AC-ACC-005 AC-CAT-001 AC-LRN-009 AC-NFR-ACC-001 | Controleren dat niveau, categorie en oefening in dezelfde toegankelijke context liggen |
REQ-UC-LLN-TOEG-003-007 | SRS-LRN-009 AC-LRN-009 | Door openen van een oefening nog geen nieuwe exercise run aanmaken |
REQ-UC-LLN-TOEG-003-008 | SRS-AUTH-001 SRS-LRN-009 SRS-NFR-SEC-001 AC-AUTH-001 AC-LRN-009 AC-NFR-SEC-001 | Een veilige terugvalroute bieden bij geweigerde oefeningtoegang |
REQ-UC-LLN-TOEG-003-009 | SRS-AUTH-001 SRS-LRN-001 AC-AUTH-001 AC-LRN-001 | Toegang vlak voor het laden van de startcontext controleren |
REQ-UC-LLN-TOEG-003-010 | SRS-CAT-001 SRS-LRN-009 AC-CAT-001 AC-LRN-009 | Routecontextconsistentie tussen niveau, categorie en oefening afdwingen |
REQ-UC-LLN-TOEG-003-011 | SRS-RDM-001 SRS-RDM-009 SRS-LRN-009 SRS-NFR-SEC-001 AC-RDM-001 AC-RDM-009 AC-LRN-009 AC-NFR-SEC-001 | Race conditions tussen lijstweergave en openen veilig afhandelen |
REQ-UC-LLN-TOEG-003-012 | SRS-LRN-009 SRS-MOD-003 AC-LRN-009 AC-MOD-003 | Een onbruikbare technische module als blokkade behandelen |
REQ-UC-LLN-TOEG-003-013 | SRS-LRN-009 AC-LRN-009 | Securityrelevante inconsistenties technisch kunnen loggen |
REQ-UC-LLN-TOEG-003-014 | SRS-AUTH-001 SRS-LRN-010 SRS-NFR-AUD-001 AC-AUTH-001 AC-LRN-010 AC-NFR-AUD-001 | Oude browsergeschiedenis niet als toegangsbewijs accepteren |