UC-DOC-RES-006 - Geen toegang tot resultaten buiten docentcontext
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-RES-006 |
| Naam | Geen toegang tot resultaten buiten docentcontext |
| Domein | Docent |
| Subdomein | Resultaten en geschiedenis binnen docentcontext |
| Primaire actor | Docent |
| Secundaire actor(en) | Systeem, Leerling |
| Rolcontext | Actieve docentcontext met geldige docentrol en resultaatinzage binnen eigen geautoriseerde niveaucontext |
| Betrokken schermen | Docent - Geschiedenis, Docent - Resultaatdetail, Routeguard / toegangafhandeling |
| Gerelateerde usecases | UC-DOC-RES-001, UC-DOC-RES-002, UC-DOC-RES-003, UC-DOC-RES-004, UC-DOC-RES-005, UC-DOC-LLN-004 |
| Primaire entiteiten | Users, UserRoles, Roles, UserRelationships, TeacherStudentLevelAccess, ExerciseRuns |
| Secundaire entiteiten / events | Routeguard, autorisatieservice, resultatenservice |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe OefenHub voorkomt dat een docent resultaten buiten de eigen docentcontext ziet.
De flow is een beveiligings- en autorisatieflow. Zij kan worden getriggerd door directe URL-toegang, verouderde links, gemanipuleerde parameters of gewijzigde autorisaties.
Het systeem blokkeert veilig zonder gegevens uit de verboden context prijs te geven.
3. Scope
3.1 Binnen scope
- Server-side valideren van toegang tot resultaatlijsten, filters, details en PDF-export.
- Blokkeren van directe URL-toegang buiten docentcontext.
- Veilig afhandelen van verouderde clientstate na autorisatiewijzigingen.
- Voorkomen dat verboden resultaten via filters, paginering of exports zichtbaar worden.
- Veilig afhandelen van verboden resultaattoegang zonder resultaatdetails of contextinformatie prijs te geven.
3.2 Buiten scope
- Wijzigen van autorisaties.
- Relatieontkoppeling zelf.
- Beheerderanalyse buiten docentcontext.
- Accountblokkade of security incident workflow.
- Inhoudelijke correctie van resultaten.
3.3 DRY-afbakening
- Leerlingresultaten en statistiekdefinities blijven inhoudelijk bronhoudend in de leerlingresultaat- en centrale FO/TO/SRS-regels.
- Docentniveau-autorisaties worden hier toegepast, maar het wijzigen ervan blijft bronhoudend in het subdomein Leerlingen en niveau-autorisaties.
- Relatievorming en relatieontkoppeling blijven bronhoudend in het generieke relatiedomein.
- PDF-layoutregels worden niet per usecase als nieuwe bronwaarheid herhaald, maar verwijzen naar de centrale resultaat- en PDF-afspraken.
- Deze usecases maken geen eigen kopie van oefenruns, statistieken of histories voor docenten.
- Directe toegang via URL, filter of exportverzoek blijft altijd onder dezelfde autorisatiegrens vallen.
- Systeemberichten, privéberichten en meldingen worden niet aangemaakt door het bekijken van resultaten.
- Module-specifieke payload blijft eigendom van de technische module; de docentweergave gebruikt veilige representaties.
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 betrokken leerling, run of resultatenlijst valt potentieel binnen de docentcontext. |
| PRE-005 | De backend kan actuele autorisatie-, relatie- en resultaatgegevens ophalen. |
| PRE-006 | De relevante resultaatdata is beschikbaar in de persistente run- en voortgangsopslag. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De docent ziet uitsluitend resultaten die binnen de eigen docentcontext vallen. |
| POST-002 | Geen resultaat, oefenrun, autorisatie of profielgegeven is gewijzigd door deze read-only flow. |
| POST-003 | Een verboden of verouderd verzoek is veilig geblokkeerd zonder contextlek. |
| POST-004 | De frontend toont een actuele lijst, detailweergave, export of veilige afwijzing. |
| POST-005 | Fout- en blokkadesituaties worden veilig afgehandeld zonder nieuwe domeinentiteiten te introduceren. |
| POST-006 | Vervolgacties blijven binnen de daarvoor bedoelde usecases. |
6. Trigger
De docent probeert via route, link, oude clientstate, filterwaarde of directe URL een resultaat buiten de eigen docentcontext te openen.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Docent | Route/link/filter | Probeert resultaat of lijst buiten context te openen | Frontend stuurt verzoek of routeguard start | ExerciseRunId/filterparameters |
| 2 | Frontend | Routeguard | Controleert bekende sessiestatus | Stuurt verzoek naar backend voor definitieve controle | Clientcontrole is aanvullend |
| 3 | Systeem | Sessieservice | Controleert actieve docentrol | Blokkeert zonder docentrol | UserRoles, Roles |
| 4 | Systeem | Resultatenservice | Bepaalt betrokken leerling, niveau en runcontext | Maakt autorisatiecontrole mogelijk | ExerciseRuns |
| 5 | Systeem | Autorisatieservice | Controleert of docent deze context mag zien | Detecteert buiten-context situatie | TeacherStudentLevelAccess |
| 6 | Systeem | Autorisatieservice | Weigert toegang | Retourneert generieke toegangafhandeling | Geen resultaatdata |
| 7 | Frontend | Toegangafhandeling | Toont neutrale fout of navigeert terug | Docent krijgt geen verboden details | Geen datalek |
| 8 | Docent | Pagina | Keert terug naar toegestane lijst of frontpage | Frontend laadt toegestane context opnieuw | UC-DOC-RES-001 |
| 9 | Systeem | Applicatie | Laat alle domeindata ongewijzigd | Geen resultaat of autorisatie aangepast | Geen mutatie |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 1 | Directe URL bevat onbekende run | Systeem geeft generieke niet-beschikbaarafhandeling zonder contextinformatie. | Niet van toepassing | Geen |
| ALT-002 | 3 | Gebruiker is geen docent meer | Systeem blokkeert volledige docentresultaatroute. | Niet van toepassing | Geen |
| ALT-003 | 5 | Autorisatie is net ingetrokken na laden van lijst | Systeem weigert detailopening en ververst lijst. | Niet van toepassing | Geen |
| ALT-004 | 5 | Run hoort bij dezelfde leerling maar ander niveau of andere docentcontext | Systeem blokkeert resultaatinhoud. | Niet van toepassing | Geen |
| ALT-005 | 6 | PDF-export wordt buiten context aangevraagd | Systeem genereert geen PDF. | Niet van toepassing | Geen |
| ALT-006 | 7 | Poging lijkt technisch verdacht | Systeem logt met passend niveau zonder persoonsgegevens onnodig breed te verspreiden. | Niet van toepassing | Geen |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Docentresultaten zijn altijd docentcontextgebonden. |
| BR-002 | Een docent mag geen resultaten zien van niveaus die buiten de eigen geautoriseerde context vallen. |
| BR-003 | Directe URL-toegang geeft nooit recht op resultaatinzage. |
| BR-004 | Filters, paginering en exports gebruiken dezelfde autorisatiegrens als resultaatdetails. |
| BR-005 | Bij blokkade wordt geen verboden resultaatinhoud, leerlingcontext of andere docentcontext bevestigd. |
| BR-006 | Clientstate is nooit leidend voor resultaattoegang. |
| BR-007 | Verouderde links worden veilig geblokkeerd wanneer de actuele autorisatie ontbreekt. |
| BR-008 | Een toegangsblokkade mag geen onnodige persoonsgegevens of resultaatcontext prijsgeven. |
| BR-009 | Deze usecase wijzigt geen autorisaties; zij past bestaande autorisaties toe. |
| BR-010 | Deze usecase wijzigt geen resultaten en geen geschiedenis. |
| BR-011 | Een gebruiker met gecombineerde rollen krijgt alleen toegang via de op dat moment geldige rolcontext. |
| BR-012 | Beheerderrechten worden niet stilzwijgend gebruikt binnen een docentresultaatroute. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| DocentUserId | Moet overeenkomen met de server-side ingelogde gebruiker en mag niet uit formulierinvoer worden vertrouwd. |
| StudentUserId | Moet binnen de toegestane docentcontext vallen voordat resultaten worden gelezen. |
| ExerciseRunId | Moet bestaan, afgerond zijn en binnen de toegestane context vallen. |
| TeacherLevelId | Moet onderdeel zijn van de eigen docentcontext of historische resultaatcontext waar de docent recht op heeft. |
| CategoryId | Mag alleen als filter worden toegepast binnen de reeds toegestane dataset. |
| ExerciseId | Mag alleen als filter of context worden gebruikt binnen de toegestane dataset. |
| Periodefilter | Moet geldige datums bevatten en mag niet leiden tot datasetuitbreiding buiten autorisatie. |
| Paginering | Moet worden begrensd op toegestane waarden en bij lege pagina veilig terugvallen. |
| PDF-bestandsnaam | Moet worden opgeschoond van ongeldige tekens en lengtebeperkingen respecteren. |
| Modulepayload | Mag alleen via veilige render- of exportrepresentatie worden gebruikt. |
11. Datamutaties en events
| Stap | Type | Entiteit / readmodel | Gedrag |
|---|---|---|---|
| 1 | Controle | Sessieservice / autorisatieservice | Controleert actieve docentrol en resultaatcontext server-side. |
| 2 | Controle | TeacherStudentLevelAccess / UserRelationships | Bepaalt dat de gevraagde leerling, run, filter of export buiten de docentcontext valt. |
| 3 | Afwijzing | Toegangafhandeling | Retourneert een generieke blokkade zonder resultaatdata of contextdetails prijs te geven. |
| 4 | Geen domeinmutatie | ExerciseRuns / ExerciseRunProgress | Verboden toegang wijzigt geen run, voortgang, resultaat of statistiek. |
| 5 | Geen domeinmutatie | TeacherStudentLevelAccess / UserRelationships | Autorisaties en relaties worden niet aangepast. |
| 6 | Geen domeinmutatie | SystemMessages / PrivateMessages / Tickets | De blokkade maakt geen systeemcommunicatie of melding aan. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Users | Resultaat- en geschiedenisweergave wijzigt geen gebruikersaccount. |
| UserRoles / Roles | Bekijken of exporteren van resultaten wijzigt geen rollen. |
| UserRelationships | Docent-leerlingrelaties worden alleen gecontroleerd, niet gewijzigd. |
| TeacherStudentLevelAccess | Autorisaties worden gecontroleerd, niet aangepast. |
| TeacherLevels | Niveaucontext wordt gelezen en niet gewijzigd. |
| Categories | Categoriecontext wordt gelezen en niet gewijzigd. |
| Exercises | Oefeningcontext wordt gelezen en niet gewijzigd. |
| ExerciseRuns | Bekijken, filteren of exporteren wijzigt de run niet. |
| ExerciseRunProgress | Vraagdetails worden gelezen en niet aangepast. |
| SystemMessages | Resultaatinzage maakt geen systeemberichten aan. |
| PrivateMessages | Resultaatinzage maakt geen privéberichten aan. |
| Tickets | Resultaatinzage maakt geen melding aan. |
13. State diagram
Niet van toepassing als persistent statusmodel. De usecase leest bestaande oefenrunstatussen en autorisatiecontext, maar introduceert geen nieuwe status voor docentresultaatinzage.
14. Decision flow
15. Data lifecycle diagram
Deze usecase maakt geen nieuwe resultaatdata aan. Het lifecyclebeeld toont dat bestaande runs alleen worden gelezen.
16. Sequence diagrammen
16.1 Toegang buiten docentcontext blokkeren
16.2 Directe route of verouderde clientstate blokkeren
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| Niet van toepassing | Alle momenten | Resultaatinzage, filtering, export en blokkades gebruiken geen nieuwe domeinspecifieke popupregister-popup. |
| Niet van toepassing | PDF-downloadfout | Een exportfout wordt via generieke foutafhandeling verwerkt zonder popupteksten in de usecase te dupliceren. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Docentresultaten moeten expliciet contextgebonden worden beschreven: alleen resultaten van niveaus die de docent zelf aan de leerling heeft geautoriseerd of waarvoor de docent volgens de geldende docentcontext inzagerecht heeft. |
| Technisch Ontwerp | Technisch Ontwerp: oefenruns, resultaten en PDF-brondata, PDF-export, readmodels en resultaatlezers en autorisatie beschrijven de technische uitwerking. Backendqueries voor geschiedenis, filters, resultaatdetails en PDF-export moeten altijd eerst autorisatiecontext toepassen en daarna pas filters, sortering of exportlogica. |
| Software Requirements Specification | Requirements moeten vastleggen dat directe URL-toegang, filterparameters en exportverzoeken geen toegang buiten docentcontext mogen opleveren. |
| Database-informatie | ExerciseRuns en gerelateerde resultaatdata blijven bronhoudend; er is geen aparte docentresultatentabel nodig. |
| Ontwerpbronnen | Autorisatiematrix, business rules en usecase-matrices moeten docentresultaatinzage en blokkades buiten context opnemen. Read-only resultaatinzage vraagt geen nieuw domeinevent. |
| Privacy/AVG | Resultaatinzage door docenten moet dataminimalisatie respecteren en geen resultaten buiten onderwijscontext zichtbaar maken. |
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-RES-006-001 | SRS-AUTH-001 SRS-TCH-004 AC-AUTH-001 AC-TCH-004 | Resultaattoegang buiten docentcontext blokkeren |
REQ-UC-DOC-RES-006-002 | SRS-AUTH-001 SRS-TCH-001 SRS-CNT-004 AC-AUTH-001 AC-TCH-001 AC-CNT-004 | Directe URL-toegang server-side controleren |
REQ-UC-DOC-RES-006-003 | SRS-AUTH-001 SRS-RDM-001 SRS-TCH-001 AC-AUTH-001 AC-RDM-001 AC-TCH-001 | Filter- en exporttoegang aan dezelfde contextgrens onderwerpen |
REQ-UC-DOC-RES-006-004 | SRS-TCH-001 AC-TCH-001 | Geen verboden contextinformatie lekken bij blokkade |
REQ-UC-DOC-RES-006-005 | SRS-AUTH-001 SRS-AUTH-002 SRS-TCH-001 SRS-GUA-001 SRS-NFR-SEC-001 AC-AUTH-001 AC-AUTH-002 AC-TCH-001 AC-GUA-001 AC-NFR-SEC-001 | Verouderde clientstate veilig afhandelen |
REQ-UC-DOC-RES-006-006 | SRS-TCH-004 SRS-NFR-SEC-001 AC-TCH-004 AC-NFR-SEC-001 | Blokkades veilig afhandelen zonder resultaatdetails of contextgegevens prijs te geven |
REQ-UC-DOC-RES-006-007 | SRS-AUTH-001 SRS-LRN-009 SRS-TCH-001 AC-AUTH-001 AC-LRN-009 AC-TCH-001 | Toegang tot leerlingresultaten altijd server-side valideren |
REQ-UC-DOC-RES-006-008 | SRS-LRN-009 SRS-TCH-005 AC-LRN-009 AC-TCH-005 | Testruns uitsluiten van docentresultaten |
REQ-UC-DOC-RES-006-009 | SRS-LRN-006 SRS-TCH-004 SRS-NFR-AUD-001 AC-LRN-006 AC-TCH-004 AC-NFR-AUD-001 | Niet-afgeronde runs buiten resultaatgeschiedenis houden |
REQ-UC-DOC-RES-006-010 | SRS-TCH-001 AC-TCH-001 | Technische identifiers niet als gebruikersgerichte herkenningsgegevens tonen |
REQ-UC-DOC-RES-006-011 | SRS-TCH-004 AC-TCH-004 | Resultaatinzage zonder domeinmutatie verwerken |