UC-OVG-RES-007 — Geen toegang zonder actieve ouder-/voogdrelatie
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-OVG-RES-007 |
| Naam | Geen toegang zonder actieve ouder-/voogdrelatie |
| Domein | Ouder/voogd / Resultaten en geschiedenis |
| Primaire actor | Ouder/voogd |
| Secundaire actor(en) | Frontend, backend, database, securitylogging |
| Rolcontext | Actieve ouder-/voogdcontext; server-side bepaald vanuit de ingelogde gebruiker |
| Betrokken schermen | Kindgeschiedenis, Resultaatdetail, PDF-download, Toegang geweigerd |
| Gerelateerde usecases | UC-OVG-KIND-005, UC-OVG-RES-001, UC-OVG-RES-002, UC-GEN-REL-004 |
| Primaire entiteiten | UserRelationships, ExerciseRuns, Users |
| Secundaire entiteiten / events | GuardianAccessDenied, SecurityLog |
| Gerelateerde popups | POP-OVG-RESULT-ACCESS-DENIED, POP-OVG-CHILD-RELATION-NOT-ACTIVE |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe het systeem toegang tot resultaten en geschiedenis blokkeert wanneer er geen actieve ouder-/voogdrelatie bestaat. Dit geldt ook wanneer de gebruiker een oude URL, browsergeschiedenis, bookmark of gemanipuleerd RunId gebruikt.
De blokkade is server-side leidend. De frontend mag acties verbergen, maar de backend beslist bij iedere raadpleeg- en exportactie opnieuw of de relatie actief is.
Uitgangspunten
- Actieve ouder-/voogdrelatie is vereist voor resultaatinzage.
- Clientstate en oude routes geven geen toegang.
- Na ontkoppeling vervalt reguliere resultaatinzage.
- Blokkade wijzigt geen historische runs.
- Ongeautoriseerde pogingen kunnen veilig gelogd worden.
3. Scope
Deze usecase beschrijft:
- blokkeren van kindgeschiedenis zonder actieve relatie;
- blokkeren van resultaatdetail zonder actieve relatie;
- blokkeren van PDF-export zonder actieve relatie;
- veilige foutafhandeling zonder datalek;
- ongeldig maken van verouderde clientselecties.
Deze usecase beschrijft niet:
- relatie opnieuw aanmaken;
- ontkoppeling terugdraaien;
- historische runs verwijderen;
- identity-providerrollen wijzigen.
3.1 Afbakening met aangrenzende domeinen
| Onderdeel | Afbakening |
|---|---|
| Leerling / Resultaten | De historische run, statistiekvelden en PDF-bron blijven dezelfde bron als in het leerlingdomein; de ouder-/voogdweergave voegt alleen autorisatie en selectie op oudercontext toe. |
| Docent / Resultaten | Docentresultaten blijven beperkt tot de eigen docentcontext; een docentrelatie geeft geen toegang via ouder-/voogdroutes. |
| Generiek / Relaties | Relatievorming, uitnodigingen en algemene relatie-lifecycle blijven buiten deze resultaatusecases. |
| Database / Readmodels | Bij blokkade wordt geen resultaatreadmodel opgebouwd en geen gedeeltelijke resultaatdata teruggegeven. |
4. Pre-condities
| 001 | Er is een verzoek voor kindgeschiedenis, resultaatdetail of PDF-export. | | 002 | De gebruiker is ingelogd, maar de actieve ouder-/voogdrelatie ontbreekt of is beëindigd. | | 003 | De backend kan relatie- en runcontext controleren. |
5. Post-condities
| 001 | Toegang is geweigerd. | | 002 | Er is geen resultaatdata getoond. | | 003 | Geen run of relatie is gewijzigd. | | 004 | Eventuele securitylogging is uitgevoerd zonder gevoelige inhoud te lekken. |
6. Trigger
De gebruiker probeert ouder-/voogdresultaten te openen zonder actieve ouder-/voogdrelatie.
7. Normale processtroom
| Stap | Actor / component | Actie | Resultaat | Data / controle |
|---|---|---|---|---|
| 1 | Gebruiker | Opent oude of ongeldige resultaatroute | Frontend vraagt data op | KindId/RunId |
| 2 | Backend | Controleert sessie en rolcontext | Gebruiker is bekend | Users/Roles |
| 3 | Backend | Controleert ouder-/voogdrelatie | Geen actieve relatie gevonden | UserRelationships |
| 4 | Backend | Blokkeert dataset | Geen resultaatdata wordt teruggegeven | Access denied |
| 5 | Frontend | Toont veilige melding | Gebruiker ziet geen kinddata | PopupKey |
| 6 | Backend | Registreert relevante poging waar nodig | Security/audit beschikbaar zonder gevoelige payload | SecurityLog |
7.1 Scherm- en routegedrag
- De resultatenroutes worden altijd opnieuw server-side geautoriseerd.
- De ouder-/voogdweergave toont read-only informatie over gekoppelde kinderen.
- De pagina gebruikt functionele namen en context, geen technische identifiers als herkenningsmiddel.
- Oude filters, routeparameters of browserstate mogen geen toegang afdwingen.
8. Alternatieve en exceptionele processtromen
| 001 | Gebruiker heeft docentrelatie met hetzelfde kind maar geen ouderrelatie: ouderroute blijft geblokkeerd. | | 002 | Gebruiker heeft beheerderrol: deze ouder-/voogdroute verleent geen beheerderinzage. | | 003 | Relatie is net beëindigd tijdens een open scherm: vervolgverzoeken worden geweigerd. | | 004 | RunId bestaat niet: systeem toont dezelfde veilige niet-beschikbaarafhandeling. | | 005 | Account van kind is geanonimiseerd: geen actuele persoonsgegevens worden getoond. |
8.1 Afhandeling van verouderde of ongeldige clientstate
- De backend herhaalt autorisatie bij iedere raadpleeg-, filter-, export- of liveactie.
- Oude routeparameters, browserselecties en clientcache worden genegeerd wanneer de actuele server-side context geen toegang geeft.
- De frontend mag het scherm herstellen door het actuele readmodel opnieuw op te vragen.
9. Business rules
| 001 | Ouder-/voogdresultaatinzage vereist een actieve ouder-/voogdrelatie. | | 002 | Andere rollen vervangen de ouder-/voogdrelatie niet binnen deze route. | | 003 | Bij weigering wordt geen gedeeltelijke resultaatdata getoond. | | 004 | Een beëindigde relatie blijft historisch, maar is niet autoriserend. | | 005 | Autorisatie wordt per verzoek opnieuw gecontroleerd. |
9.1 Readmodel- en tellerdefinities
| Waarde | Definitie | Uitsluitingen / grenzen |
|---|---|---|
| Toegangsstatus | Afgeleid uit actieve UserRelationships-records. | Beëindigde relaties zijn niet autoriserend. |
| Foutmelding | Generieke toegang-geweigerdafhandeling. | Geen kindnaam of rungegevens lekken als toegang ontbreekt. |
| Securitylog | Technische vastlegging van geweigerd verzoek waar relevant. | Geen antwoorden, tokens of gevoelige payloads. |
9.2 Autorisatie- en privacygrenzen
- De zichtbare dataset wordt altijd server-side beperkt tot actieve ouder-/voogdrelaties.
- Een gebruiker met gecombineerde rollen krijgt binnen deze routes geen impliciete docent- of beheerderinzage.
- Resultaat- en livegegevens van niet-gekoppelde kinderen worden nooit gedeeltelijk getoond.
10. Datavalidatie
| 001 | Sessie moet geldig zijn. | | 002 | Relatie moet actief zijn en RelationshipType ouder-/voogd hebben. | | 003 | Run moet aan gekoppeld kind horen voordat data wordt vrijgegeven. | | 004 | Geen enkel resultaatveld mag worden teruggegeven bij autorisatiefout. | | 005 | Oude clientselectie moet worden genegeerd. |
11. Datamutaties en events
| 001 | Geen domeinmutaties. |
| 002 | Securitylogging kan een geweigerde toegangspoging vastleggen zonder resultaatinhoud op te slaan. |
| 003 | Functioneel event: GuardianAccessDenied. |
12. Geen datamutaties
| 001 | UserRelationships worden niet hersteld. | | 002 | ExerciseRuns worden niet gewijzigd. | | 003 | Systeemberichten worden niet aangemaakt. | | 004 | UserRoles worden niet gewijzigd. |
13. State diagram
Niet van toepassing. Deze usecase blokkeert toegang en wijzigt geen persistent statusobject.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Gebruik |
|---|---|
| POP-OVG-RESULT-ACCESS-DENIED | Wordt gebruikt wanneer resultaattoegang wordt geweigerd. |
| POP-OVG-CHILD-RELATION-NOT-ACTIVE | Wordt gebruikt wanneer de ouder-/voogdrelatie ontbreekt of niet actief is. |
Popupteksten, knopteksten, inputlabels en themakeuzes worden niet in deze usecase gedupliceerd. Het popupregister en de popupthemes blijven bronhoudend.
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| 001 | Autorisatie voor ouder-/voogdresultaten moet server-side uit actieve relaties volgen. | | 002 | Gecombineerde rollen mogen niet impliciet toegang via de verkeerde context geven. | | 003 | Na ontkoppeling mogen oude routes geen resultaatdata meer tonen. |
18.1 Impact voor database-informatie en ontwerpbronnen
| 001 | Autorisatiematrix moet ouder-/voogdraadpleging onderscheiden van docentraadpleging. | | 002 | Usecase-scherm-matrix moet de betrokken ouder-/voogdschermen koppelen aan deze usecase. | | 003 | Usecase-requirement-matrix moet de requirements uit hoofdstuk 19 opnemen. | | 004 | Readmodeldefinities voor ouder-/voogdresultaten moeten alle niveaus van het gekoppelde kind omvatten. |
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.
Er zijn voor deze usecase geen aparte requirement-afleidingen vastgelegd. De procesbeschrijving blijft broncontext voor de SRS-traceability.