UC-BEH-LINKS-001 — Handige links en pagina's openen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-LINKS-001 |
| Naam | Handige links en pagina's openen |
| Domein | Beheerder / Handige links en vaste pagina’s |
| Primaire actor | Beheerder |
| Secundaire actor(en) | Frontend, backend, autorisatiecomponent, database, historyservice |
| Rolcontext | Actieve beheerdercontext; overige combinatierollen geven geen extra beheerrechten binnen deze usecase |
| Betrokken schermen | Site Instellingen > Handige links & pagina’s, Footer-tabs, URL-overzicht, vaste-pagina-editor, geschiedenisdeel |
| Gerelateerde usecases | UC-BEH-SITE-001, UC-BEH-SITE-002, UC-BEH-FRONT-003 |
| Primaire entiteiten | SiteLinks, SiteLinkHistory, FooterSections, FooterLinkAssignments, FooterLinkAssignmentHistory, ContentBlocks, ContentBlockHistory |
| Secundaire entiteiten / events | DomainType, ContextType, LinkType, FooterColumnType, Users |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
De beheerder opent de beheerpagina Handige links & pagina's. Het systeem toont tabs voor Intro, Footer, Over OefenHub, Privacybeleid en Contact.
Handige links en vaste pagina’s beheren herbruikbare URL-records, footerinhoud en de tekstuele inhoud van publieke vaste pagina’s zoals Over OefenHub, Privacybeleid en Contact.
De usecase gebruikt als functionele basis: DomainType = Footer of StaticPage, LinkType = Internal of External, FooterColumnType = Middle of Right. Dit betekent dat de beheerinterface geen vrije technische constructies introduceert, maar alleen werkt binnen de bestaande sleutelsets, records en codevaste ankers.
Deze usecase legt vast welke gegevens worden gelezen of gewijzigd, welke gegevens bewust niet worden gewijzigd en welke validaties server-side plaatsvinden.
Uitgangspunten
- De beheerdercontext is altijd server-side leidend.
- De beheerinterface maakt onderscheid tussen beheerbare inhoud en technische ankers.
- History is onderdeel van het functionele resultaat wanneer een beheerder een wijziging opslaat.
- Zoeken, filteren, contextselectie en detailopenen zijn read-only totdat expliciet wordt opgeslagen.
- Onbekende of gemanipuleerde identifiers worden veilig geblokkeerd.
- De gebruikersinterface toont geen technische stacktraces of interne databasefouten.
- Domeinoverschrijdende bijwerkingen zijn uitgesloten tenzij een usecase die expliciet benoemt.
- De uitwerking volgt de centrale popup-, DRY- en ontwerpbronafspraken.
3. Scope
Deze usecase beschrijft:
- De beheerder opent de beheerpagina Handige links & pagina's. Het systeem toont tabs voor Intro, Footer, Over OefenHub, Privacybeleid en Contact.
- Server-side controleren dat de gebruiker beheerder is.
- Werken binnen de afbakening van Beheerder / Handige links en vaste pagina’s.
- Gebruik van DomainType = Footer of StaticPage, LinkType = Internal of External, FooterColumnType = Middle of Right.
- Scheiding tussen beheerbare velden en codegedreven of read-only velden.
- Veilige fout-, lege-staat- en blokkadeafhandeling.
- History of auditregistratie wanneer de usecase een wijziging uitvoert.
- Readmodelverversing na selectie, validatie of opslaan.
- Voorkomen dat deze beheeractie onbedoeld andere domeinen wijzigt.
Deze usecase beschrijft niet:
- Vrij aanpassen van de structurele pagina-opbouw van publieke pagina’s.
- Beheren of wijzigen van het contactformulier zelf.
- Opslaan van ongeldige interne of externe URL’s.
- Verwijderen van URL-records die nog in footertoewijzingen worden gebruikt.
- Aanmaken van willekeurige footergebieden buiten de bekende kolommen en rolcontexten.
- Wijzigen van accounts, rollen of sessies buiten de autorisatiecontrole.
- Maken of wijzigen van oefenruns, resultaten, relaties, meldingen of privéberichten.
- Aanpassen van onderliggende code, migraties of seeddefinities via de beheerinterface.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is ingelogd en heeft een actief intern OefenHub-account. |
| PRE-002 | De gebruiker bezit een actieve beheerderrol. |
| PRE-003 | De beheerder opent de relevante route via Site Instellingen of een onderliggende beheerpagina. |
| PRE-004 | De relevante records of contexten voor Beheerder / Handige links en vaste pagina’s zijn aanwezig of kunnen als veilige lege staat worden getoond. |
| PRE-005 | De server-side autorisatiecomponent is beschikbaar. |
| PRE-006 | De database en historytabellen zijn beschikbaar voor read-only of muterende acties. |
| PRE-007 | De frontend gebruikt de actuele serverrespons en niet alleen eerder opgeslagen clientstate. |
| PRE-008 | Eventuele feature- of routebeschikbaarheid is door de applicatieconfiguratie toegestaan. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De usecase "Handige links en pagina's openen" is uitgevoerd binnen de beheerdercontext. |
| POST-002 | De beheerder ziet een actuele, veilige weergave of een duidelijke blokkade. |
| POST-003 | Read-only acties hebben geen domeinmutatie uitgevoerd. |
| POST-004 | Muterende acties hebben uitsluitend toegestane velden gewijzigd. |
| POST-005 | Wanneer een wijziging is opgeslagen, is history of auditinformatie vastgelegd. |
| POST-006 | Wanneer validatie faalt, zijn geen gedeeltelijke wijzigingen opgeslagen. |
| POST-007 | Technische sleutels en codegedreven velden zijn ongewijzigd gebleven. |
| POST-008 | Andere domeinen zoals accounts, meldingen, relaties en oefenruns zijn niet gewijzigd. |
6. Trigger
De usecase start wanneer de beheerder de actie Handige links en pagina's openen uitvoert binnen het beheeronderdeel Beheerder / Handige links en vaste pagina’s.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Beheerder | Site Instellingen | Kiest het beheeronderdeel. | Frontend vraagt de beheerpagina op. | Server-side autorisatie verplicht. |
| 2 | Frontend | Routering | Stuurt routeverzoek naar backend. | Backend controleert actieve beheerdercontext. | Geen client-only toegang. |
| 3 | Backend | Autorisatiecomponent | Controleert account, rol en routebevoegdheid. | Alleen actieve beheerder krijgt toegang. | Users, Roles, UserRoles. |
| 4 | Backend | Overzichtservice | Laadt de relevante beheerrecords. | Alleen records binnen het subdomein worden opgehaald. | SiteLinks, SiteLinkHistory, FooterSections, FooterLinkAssignments, FooterLinkAssignmentHistory, ContentBlocks, ContentBlockHistory. |
| 5 | Backend | Filter- en zoekmodel | Bepaalt standaardweergave, filters en sortering. | Het overzicht krijgt stabiele sortering en veilige lege staat. | Readmodel. |
| 6 | Backend | Geschiedenisindicatie | Bepaalt waar history beschikbaar is. | De UI toont doorklikmogelijkheden zonder historydetails direct te laden. | Historytabellen. |
| 7 | Backend | Frontend | Levert overzichtsreadmodel. | Frontend ontvangt records, metadata, filteropties en toegestane acties. | Geen mutatie. |
| 8 | Frontend | Beheerpagina | Rendert overzicht en detailpositie. | De beheerder ziet welke records of contexten beschikbaar zijn. | Afbakening tot beheerpagina. |
| 9 | Beheerder | Beheerpagina | Zoekt, filtert of selecteert een record. | Systeem beperkt resultaten tot het subdomein. | Zoeken wijzigt geen data. |
| 10 | Beheerder | Beheerpagina | Kiest eventueel een detail- of bewerkactie. | Vervolgusecase neemt over. | Geen directe domeinmutatie vanaf openen. |
| 11 | Frontend | Beheerpagina | Toont lege of foutstaat indien nodig. | Geen technische details worden gelekt. | Veilige UI-afhandeling. |
| 12 | Systeem | Audit | Registreert geen beheerwijziging. | Alleen daadwerkelijke wijzigingen worden auditbaar vastgelegd. | Geen AdminAuditLog door alleen openen. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | De gebruiker heeft geen actieve beheerderrol. | Backend blokkeert de actie en toont geen beheerdata. | Inline toegang geweigerd of veilige redirect. | Geen. |
| ALT-002 | 3 | Het interne account is gedeactiveerd of geanonimiseerd. | De sessiecontext wordt ongeldig gemaakt voor beheeracties. | Accountafhandeling. | Geen. |
| ALT-003 | 4 | Het gevraagde record of blok bestaat niet. | Het systeem toont een veilige niet-beschikbaarafhandeling. | Inline melding. | Geen. |
| ALT-004 | 4 | Het record is door een andere beheerder gewijzigd. | Het systeem vraagt actuele waarden opnieuw op of blokkeert opslaan bij versieconflict. | Inline conflictmelding. | Geen tot bevestigde nieuwe opslag. |
| ALT-005 | 5 | De invoer overschrijdt een validatiegrens. | Opslaan wordt geweigerd en fout wordt bij het veld getoond. | Inline validatie. | Geen. |
| ALT-006 | 5 | Een read-only veld is in de payload gewijzigd. | Backend negeert of weigert de payload en registreert geen wijziging. | Inline foutmelding. | Geen. |
| ALT-007 | 7 | Historyregistratie faalt terwijl de mutatie vereist auditbaar is. | De gehele transactie wordt teruggedraaid. | Veilige foutmelding. | Geen blijvende mutatie. |
| ALT-008 | 7 | De databaseactie faalt technisch. | De wijziging wordt niet gedeeltelijk opgeslagen. | Veilige foutmelding. | Geen of rollback. |
| ALT-009 | 8 | Zoek- of filterresultaat is leeg. | Het overzicht toont een neutrale lege staat. | Niet van toepassing. | Geen. |
| ALT-010 | 9 | De beheerder verlaat de pagina met niet-opgeslagen wijzigingen. | De UI waarschuwt volgens generieke formulierregels wanneer zulke bescherming beschikbaar is. | Generieke verlaten-waarschuwing indien geregistreerd. | Geen. |
| ALT-011 | 5 | Een URL-validatie faalt. | Opslaan wordt geblokkeerd totdat de URL of route geldig is. | Inline validatie. | Geen. |
| ALT-012 | 3 | De URL is nog in gebruik in een footertoewijzing. | Verwijderen wordt geblokkeerd en de gebruikte locaties worden getoond. | Inline blokkade. | Geen. |
9. Business rules
| ID | Regel |
|---|---|
| BR-UC-BEH-LINKS-001-001 | Footerinhoud en vaste pagina-inhoud zijn tekstueel beheerbaar binnen codevaste bloklocaties. |
| BR-UC-BEH-LINKS-001-002 | URL-records zijn herbruikbaar en worden afzonderlijk beheerd van hun plaatsing in footerkolommen. |
| BR-UC-BEH-LINKS-001-003 | Een URL-record mag niet worden verwijderd zolang het in gebruik is in een footerlinktoewijzing. |
| BR-UC-BEH-LINKS-001-004 | Interne routes en externe URL’s moeten vóór opslaan functioneel valideerbaar zijn. |
| BR-UC-BEH-LINKS-001-005 | Het contactformulier zelf valt buiten deze inhoudsbeheerpagina. |
| BR-UC-BEH-LINKS-001-006 | Verwijderde URL-records blijven historisch herleidbaar via soft-deletegedrag. |
| BR-UC-BEH-LINKS-001-007 | Het openen van het overzicht is read-only en mag geen inhoudelijke beheerwijziging registreren. |
| BR-UC-BEH-LINKS-001-008 | Zoeken, filteren en sorteren wijzigen geen brondomeinrecords. |
| BR-UC-BEH-LINKS-001-009 | De standaardweergave moet een veilige lege staat ondersteunen. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Beheerdercontext | De gebruiker moet server-side een actieve beheerderrol hebben. |
| Recordtoegang | Het record, blok of template moet binnen het gevraagde subdomein bestaan. |
| Read-only velden | Technische sleutels, actie-identifiers en codegedreven velden mogen niet via de GUI worden gewijzigd. |
| Concurrency | Opslaan moet de actuele recordversie controleren zodat overschrijven van nieuwere wijzigingen wordt voorkomen. |
| LinkType | Moet Internal of External zijn. |
| URL | Moet syntactisch geldig zijn en functioneel bereikbaar of valideerbaar zijn volgens het gekozen type. |
| FooterColumnType | Moet Middle of Right zijn voor footerlinktoewijzingen. |
| Rolcontext | Moet een bekende footercontext zijn, zoals Public, Student, Teacher, Guardian of Admin. |
| StaticPage blok | Moet bij een bestaande vaste pagina en bekende bloklocatie horen. |
| Gebruiksteller | Moet bepalen of een URL nog in een footerplaatsing wordt gebruikt. |
| Auditactor | UpdatedByUserId of ChangedByUserId moet naar de uitvoerende beheerder of systeemactor verwijzen. |
| Tijdstip | Wijzigingsmomenten worden in UTC vastgelegd. |
| Rendering | Beheerbare tekst moet veilig worden opgeslagen en gerenderd zonder actieve inhoud. |
| Lege waarden | Verplichte zichtbare velden mogen niet leeg worden opgeslagen wanneer de runtime ze nodig heeft. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| Alle stappen | Database | Niet van toepassing | Deze usecase is read-only en wijzigt geen SiteLinks, FooterSections, FooterLinkAssignments, ContentBlocks of historyrecords. |
| Alle stappen | Event | Niet van toepassing | Er wordt geen functioneel domeinevent aangemaakt door alleen te raadplegen, zoeken, filteren of selecteren. |
Transactionele uitgangspunten
- De backend voert autorisatie en objecttoegang opnieuw server-side uit.
- Lege staten, filters en sorteringen zijn readmodelgedrag.
- Fouten leiden tot een veilige melding zonder gedeeltelijke mutatie.
- Er wordt geen audit- of historyrecord aangemaakt door alleen raadplegen.
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Users, Roles en UserRoles | Worden alleen gebruikt voor autorisatiecontrole; rollen of accounts worden niet gewijzigd. |
| Runtime gebruikersdata | Deze beheerusecase wijzigt geen leerling-, docent- of ouder-/voogddata. |
| Tickets en meldingen | Meldingenbeheer blijft in het generieke meldingendomein. |
| ExerciseRuns en resultaten | Oefenruns, geschiedenis en resultaten worden niet aangepast. |
| Relaties en uitnodigingen | Relatiebeheer wordt niet vanuit deze beheerpagina uitgevoerd. |
| Contactformulier | Formulierwerking, ontvangst en verwerking worden niet aangepast. |
| Publieke paginalayout | Alleen tekstvelden wijzigen; structurele blokopbouw blijft codevast. |
13. State diagram
Niet van toepassing.
Deze usecase wijzigt geen persistent statusobject. De zichtbare schermtoestand, selectie, zoekterm, filter of geschiedenisweergave is tijdelijke UI- of readmodelstate en wordt niet als domeinstatus opgeslagen.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
Usecases verwijzen alleen naar PopupKey. Popupteksten, knopteksten, acties, inputvelden en themakeuzes worden centraal beheerd in het popupregister en de popup-themes.
| PopupKey | Moment | Doel |
|---|---|---|
| Niet van toepassing | Normale processtroom gebruikt geen bevestigings- of invoerpopup. | Inline meldingen, lege staten of veilige redirects volstaan. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijft welke beheeractie de beheerder kan uitvoeren, welke schermonderdelen zichtbaar zijn en welke grenzen gelden tussen beheerbare inhoud en codegedreven structuur. |
| Technisch Ontwerp | Technisch Ontwerp: domeinmodel en admin-eigenaarschap, databaseontwerp en frontendcompositie beschrijven de technische uitwerking. Beschrijf server-side autorisatie, readmodelopbouw, transacties, historyregistratie en het gebruik van SiteLinks, SiteLinkHistory, FooterSections, FooterLinkAssignments, FooterLinkAssignmentHistory, ContentBlocks, ContentBlockHistory. |
| Software Requirements Specificatie | Beschrijft requirements voor toegangscontrole, validaties, foutafhandeling, immutable history en afbakening van beheerbare velden. |
| Database-informatie | Beschrijft of velden, constraints, historytabellen en sleutelsets voor SiteLinks, SiteLinkHistory, FooterSections, FooterLinkAssignments, FooterLinkAssignmentHistory, ContentBlocks, ContentBlockHistory volledig aansluiten op deze usecase. |
| Ontwerpbronnen en registers | Beschrijven autorisatiematrix, business rules en relevante matrices bij; command- en eventregister krijgen voor deze read-only flow geen nieuwe domeinmutatie. |
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-BEH-LINKS-001-001 | SRS-ADM-002 SRS-ADM-001 SRS-CNT-001 AC-ADM-002 AC-ADM-001 AC-CNT-001 | De actie uitsluitend toestaan aan gebruikers met een actieve beheerderrol |
REQ-UC-BEH-LINKS-001-002 | SRS-AUTH-001 SRS-AUTH-002 SRS-ADM-002 SRS-ADM-001 SRS-CNT-001 AC-AUTH-001 AC-AUTH-002 AC-ADM-002 AC-ADM-001 AC-CNT-001 | Alle beheerautorisatie server-side controleren en mag niet vertrouwen op clientstate of routeparameters |
REQ-UC-BEH-LINKS-001-003 | SRS-AUTH-004 SRS-ACC-003 SRS-ACC-005 SRS-ADM-001 SRS-CNT-001 SRS-NFR-SEC-001 AC-AUTH-004 AC-ACC-003 AC-ACC-005 AC-ADM-001 AC-CNT-001 AC-NFR-SEC-001 | Onbekende, ontbrekende of niet-toegankelijke records veilig afhandelen zonder technische details te tonen |
REQ-UC-BEH-LINKS-001-004 | SRS-ADM-001 SRS-CNT-001 AC-ADM-001 AC-CNT-001 | Read-only technische sleutels en codegedreven velden beschermen tegen wijziging via de GUI |
REQ-UC-BEH-LINKS-001-005 | SRS-RDM-001 SRS-ADM-001 SRS-CNT-001 AC-RDM-001 AC-ADM-001 AC-CNT-001 | Zoek-, filter- en selecteeracties behandelen als read-only acties zonder domeinmutatie |
REQ-UC-BEH-LINKS-001-006 | SRS-AUTH-001 SRS-ADM-001 SRS-CNT-001 AC-AUTH-001 AC-ADM-001 AC-CNT-001 | Wijzigingen pas opslaan nadat server-side validatie geslaagd is |
REQ-UC-BEH-LINKS-001-007 | SRS-ADM-001 SRS-CNT-001 SRS-NFR-AUD-001 AC-ADM-001 AC-CNT-001 AC-NFR-AUD-001 | Relevante wijzigingen auditbaar vastleggen met actor, UTC-tijdstip en oude en nieuwe waarde waar van toepassing |
REQ-UC-BEH-LINKS-001-008 | SRS-ADM-001 SRS-CNT-001 SRS-NFR-AUD-001 AC-ADM-001 AC-CNT-001 AC-NFR-AUD-001 | Historyrecords als immutable behandelen en niet via de beheerinterface wijzigbaar maken |
REQ-UC-BEH-LINKS-001-009 | SRS-ADM-001 SRS-CNT-001 SRS-NFR-SEC-001 AC-ADM-001 AC-CNT-001 AC-NFR-SEC-001 | Beheerbare tekst veilig opslaan en renderen zonder actieve of onveilige inhoud |
REQ-UC-BEH-LINKS-001-010 | SRS-ADM-001 SRS-CNT-001 AC-ADM-001 AC-CNT-001 | Lege staten en blokkades gebruikersgericht en zonder technische details weergeven |
REQ-UC-BEH-LINKS-001-011 | SRS-ADM-001 SRS-CNT-004 AC-ADM-001 AC-CNT-004 | Interne routes en externe URL’s valideren voordat deze als bruikbaar URL-record worden opgeslagen |
REQ-UC-BEH-LINKS-001-012 | SRS-AUTH-001 SRS-ADM-001 SRS-CNT-004 AC-AUTH-001 AC-ADM-001 AC-CNT-004 | Verwijderen van URL-records blokkeren zolang actieve footerlinktoewijzingen bestaan |
REQ-UC-BEH-LINKS-001-013 | SRS-AUTH-001 SRS-ADM-002 SRS-ADM-001 SRS-CNT-004 AC-AUTH-001 AC-ADM-002 AC-ADM-001 AC-CNT-004 | Footerlinktoewijzingen per rolcontext en footerkolom beheren op basis van bestaande URL-records |
REQ-UC-BEH-LINKS-001-014 | SRS-RDM-001 SRS-RDM-004 SRS-ADM-001 SRS-CNT-001 AC-RDM-001 AC-RDM-004 AC-ADM-001 AC-CNT-001 | Vaste publieke pagina’s uitsluitend tekstueel beheerbaar maken binnen codevaste blokken |
REQ-UC-BEH-LINKS-001-015 | SRS-RDM-001 SRS-RDM-004 SRS-ADM-001 SRS-CNT-003 AC-RDM-001 AC-RDM-004 AC-ADM-001 AC-CNT-003 | De usecase "Handige links en pagina's openen" uitvoeren volgens de afbakening van het subdomein Beheerder / Handige links en vaste pagina’s |