Skip to main content

UC-BEH-LINKS-005 — Footertekst bewerken

1. Kerngegevens

VeldWaarde
Usecase-IDUC-BEH-LINKS-005
NaamFootertekst bewerken
DomeinBeheerder / Handige links en vaste pagina’s
Primaire actorBeheerder
Secundaire actor(en)Frontend, backend, autorisatiecomponent, database, historyservice
RolcontextActieve beheerdercontext; overige combinatierollen geven geen extra beheerrechten binnen deze usecase
Betrokken schermenSite Instellingen > Handige links & pagina’s, Footer-tabs, URL-overzicht, vaste-pagina-editor, geschiedenisdeel
Gerelateerde usecasesUC-BEH-SITE-001, UC-BEH-SITE-002, UC-BEH-FRONT-003
Primaire entiteitenSiteLinks, SiteLinkHistory, FooterSections, FooterLinkAssignments, FooterLinkAssignmentHistory, ContentBlocks, ContentBlockHistory
Secundaire entiteiten / eventsDomainType, ContextType, LinkType, FooterColumnType, Users
Gerelateerde popupsPOP-BEH-GEN-SAVE-FAILED, POP-BEH-GEN-VALIDATION-FAILED, POP-BEH-GEN-UNSAVED-CHANGES
PopupregisterOntwerpbronnen — Popup-register
MoSCoWMust

2. Omschrijving

De beheerder bewerkt tekstuele footerinhoud, waaronder de linker tekstkolom en copyrighttekst, binnen bestaande footercontexten.

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 bewerkt tekstuele footerinhoud, waaronder de linker tekstkolom en copyrighttekst, binnen bestaande footercontexten.
  • 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

IDVoorwaarde
PRE-001De gebruiker is ingelogd en heeft een actief intern OefenHub-account.
PRE-002De gebruiker bezit een actieve beheerderrol.
PRE-003De beheerder opent de relevante route via Site Instellingen of een onderliggende beheerpagina.
PRE-004De relevante records of contexten voor Beheerder / Handige links en vaste pagina’s zijn aanwezig of kunnen als veilige lege staat worden getoond.
PRE-005De server-side autorisatiecomponent is beschikbaar.
PRE-006De database en historytabellen zijn beschikbaar voor read-only of muterende acties.
PRE-007De frontend gebruikt de actuele serverrespons en niet alleen eerder opgeslagen clientstate.
PRE-008Eventuele feature- of routebeschikbaarheid is door de applicatieconfiguratie toegestaan.

5. Post-condities

IDResultaat
POST-001De usecase "Footertekst bewerken" is uitgevoerd binnen de beheerdercontext.
POST-002De beheerder ziet een actuele, veilige weergave of een duidelijke blokkade.
POST-003Read-only acties hebben geen domeinmutatie uitgevoerd.
POST-004Muterende acties hebben uitsluitend toegestane velden gewijzigd.
POST-005Wanneer een wijziging is opgeslagen, is history of auditinformatie vastgelegd.
POST-006Wanneer validatie faalt, zijn geen gedeeltelijke wijzigingen opgeslagen.
POST-007Technische sleutels en codegedreven velden zijn ongewijzigd gebleven.
POST-008Andere domeinen zoals accounts, meldingen, relaties en oefenruns zijn niet gewijzigd.

6. Trigger

De usecase start wanneer de beheerder de actie Footertekst bewerken uitvoert binnen het beheeronderdeel Beheerder / Handige links en vaste pagina’s.

7. Normale processtroom

StapActorScherm / componentActieSysteemresponsData / regel
1BeheerderDetail- of editorpaneelOpent een bestaand record of blok in bewerkmodus.Frontend vraagt actuele versie met editmetadata op.Concurrencybasis.
2BackendAutorisatiecomponentControleert beheerderrol en recordtoegang.Bewerken is alleen toegestaan voor geldige beheerdercontext.Server-side controle.
3BackendRecordserviceLaadt actuele recordwaarden en read-only velden.UI ontvangt scheiding tussen beheerbaar en niet-beheerbaar.SiteLinks, SiteLinkHistory, FooterSections, FooterLinkAssignments, FooterLinkAssignmentHistory, ContentBlocks, ContentBlockHistory.
4FrontendEditorToont beheerbare velden.Technische sleutels, codeacties en layoutankers worden read only getoond.DRY en codegedreven grenzen.
5BeheerderEditorWijzigt toegestane velden.Frontend voert directe invoercontrole uit zonder servervalidatie te vervangen.Voorvalidatie.
6FrontendEditorMarkeert gewijzigde velden.Opslaan wordt beschikbaar wanneer een echte wijziging aanwezig is.Dirty state.
7BeheerderEditorKiest Opslaan.Frontend stuurt alleen toegestane wijzigingspayload.Commandpayload.
8BackendValidatieserviceControleert record, veldrechten, lengte en enumwaarden.Onjuiste waarden worden geblokkeerd.Datavalidatie.
9BackendDomeinservicePast toegestane velden toe.Record krijgt nieuwe waarden, UpdatedAtUtc en UpdatedByUserId.Mutatie.
10BackendHistoryserviceRegistreert historymoment en veldverschillen.Oude en nieuwe waarden blijven raadpleegbaar.Historytabellen.
11BackendFrontendLevert opgeslagen record en bevestiging.Editor toont actuele opgeslagen waarden.Geen popuptekst dupliceren.
12BeheerderEditorControleert resultaat of keert terug.Vervolgacties blijven binnen het subdomein.Geen extra mutatie.

8. Alternatieve en exceptionele processtromen

IDVanaf stapSituatieSysteemgedragPopup / meldingDatamutatie
ALT-0012De gebruiker heeft geen actieve beheerderrol.Backend blokkeert de actie en toont geen beheerdata.Inline toegang geweigerd of veilige redirect.Geen.
ALT-0023Het interne account is gedeactiveerd of geanonimiseerd.De sessiecontext wordt ongeldig gemaakt voor beheeracties.Accountafhandeling.Geen.
ALT-0034Het gevraagde record of blok bestaat niet.Het systeem toont een veilige niet-beschikbaarafhandeling.Inline melding.Geen.
ALT-0044Het 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-0055De invoer overschrijdt een validatiegrens.Opslaan wordt geweigerd en fout wordt bij het veld getoond.Inline validatie.Geen.
ALT-0065Een read-only veld is in de payload gewijzigd.Backend negeert of weigert de payload en registreert geen wijziging.Inline foutmelding.Geen.
ALT-0077Historyregistratie faalt terwijl de mutatie vereist auditbaar is.De gehele transactie wordt teruggedraaid.Veilige foutmelding.Geen blijvende mutatie.
ALT-0087De databaseactie faalt technisch.De wijziging wordt niet gedeeltelijk opgeslagen.Veilige foutmelding.Geen of rollback.
ALT-0098Zoek- of filterresultaat is leeg.Het overzicht toont een neutrale lege staat.Niet van toepassing.Geen.
ALT-0109De 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-0115Een URL-validatie faalt.Opslaan wordt geblokkeerd totdat de URL of route geldig is.Inline validatie.Geen.
ALT-0123De URL is nog in gebruik in een footertoewijzing.Verwijderen wordt geblokkeerd en de gebruikte locaties worden getoond.Inline blokkade.Geen.

9. Business rules

IDRegel
BR-UC-BEH-LINKS-005-001Footerinhoud en vaste pagina-inhoud zijn tekstueel beheerbaar binnen codevaste bloklocaties.
BR-UC-BEH-LINKS-005-002URL-records zijn herbruikbaar en worden afzonderlijk beheerd van hun plaatsing in footerkolommen.
BR-UC-BEH-LINKS-005-003Een URL-record mag niet worden verwijderd zolang het in gebruik is in een footerlinktoewijzing.
BR-UC-BEH-LINKS-005-004Interne routes en externe URL’s moeten vóór opslaan functioneel valideerbaar zijn.
BR-UC-BEH-LINKS-005-005Het contactformulier zelf valt buiten deze inhoudsbeheerpagina.
BR-UC-BEH-LINKS-005-006Verwijderde URL-records blijven historisch herleidbaar via soft-deletegedrag.
BR-UC-BEH-LINKS-005-007Opslaan is alleen toegestaan wanneer minstens één beheerbaar veld daadwerkelijk gewijzigd is.
BR-UC-BEH-LINKS-005-008Eén opslaanactie registreert een samenhangend historymoment met veldniveauverschillen waar het datamodel dat ondersteunt.
BR-UC-BEH-LINKS-005-009De backend voert alle validaties opnieuw uit, ook wanneer de frontend al voorvalidatie heeft gedaan.

10. Datavalidatie

Veld / objectValidatie
BeheerdercontextDe gebruiker moet server-side een actieve beheerderrol hebben.
RecordtoegangHet record, blok of template moet binnen het gevraagde subdomein bestaan.
Read-only veldenTechnische sleutels, actie-identifiers en codegedreven velden mogen niet via de GUI worden gewijzigd.
ConcurrencyOpslaan moet de actuele recordversie controleren zodat overschrijven van nieuwere wijzigingen wordt voorkomen.
LinkTypeMoet Internal of External zijn.
URLMoet syntactisch geldig zijn en functioneel bereikbaar of valideerbaar zijn volgens het gekozen type.
FooterColumnTypeMoet Middle of Right zijn voor footerlinktoewijzingen.
RolcontextMoet een bekende footercontext zijn, zoals Public, Student, Teacher, Guardian of Admin.
StaticPage blokMoet bij een bestaande vaste pagina en bekende bloklocatie horen.
GebruikstellerMoet bepalen of een URL nog in een footerplaatsing wordt gebruikt.
AuditactorUpdatedByUserId of ChangedByUserId moet naar de uitvoerende beheerder of systeemactor verwijzen.
TijdstipWijzigingsmomenten worden in UTC vastgelegd.
RenderingBeheerbare tekst moet veilig worden opgeslagen en gerenderd zonder actieve inhoud.
Lege waardenVerplichte zichtbare velden mogen niet leeg worden opgeslagen wanneer de runtime ze nodig heeft.

11. Datamutaties en events

StapTypeEntiteit / eventMutatie
OpslaanUpdateFooterSections of ContentBlocksTekstuele footerinhoud wordt bijgewerkt binnen bestaande context en bloklocatie.
OpslaanInsertFooter-/ContentBlockHistoryGewijzigde velden, oude waarde, nieuwe waarde, actor en UTC-tijdstip worden vastgelegd.

Transactionele uitgangspunten

  • Opslag en historyregistratie vormen één transactionele verwerking.
  • Alleen tekstuele beheerbare velden worden overgenomen.
  • Bij validatiefouten of historyfouten wordt geen gedeeltelijke wijziging bewaard.
  • De publieke footerweergave gebruikt na opslag het bijgewerkte bronrecord.

12. Geen datamutaties

EntiteitReden
Users, Roles en UserRolesWorden alleen gebruikt voor autorisatiecontrole; rollen of accounts worden niet gewijzigd.
Runtime gebruikersdataDeze beheerusecase wijzigt geen leerling-, docent- of ouder-/voogddata.
Tickets en meldingenMeldingenbeheer blijft in het generieke meldingendomein.
ExerciseRuns en resultatenOefenruns, geschiedenis en resultaten worden niet aangepast.
Relaties en uitnodigingenRelatiebeheer wordt niet vanuit deze beheerpagina uitgevoerd.
ContactformulierFormulierwerking, ontvangst en verwerking worden niet aangepast.
Publieke paginalayoutAlleen tekstvelden wijzigen; structurele blokopbouw blijft codevast.

13. State diagram

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.

PopupKeyMomentDoel
POP-BEH-GEN-VALIDATION-FAILEDFootertekst bevat ongeldige of ontbrekende waarden.Blokkeert opslag en verwijst naar veldfouten.
POP-BEH-GEN-SAVE-FAILEDOpslaan of historyregistratie faalt.Geeft veilige foutmelding zonder technische details.
POP-BEH-GEN-UNSAVED-CHANGESBeheerder verlaat editor met niet-opgeslagen wijzigingen.Waarschuwt dat wijzigingen verloren gaan bij verlaten.

18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification

DoeldocumentAfleiding
Functioneel OntwerpBeschrijft welke beheeractie de beheerder kan uitvoeren, welke schermonderdelen zichtbaar zijn en welke grenzen gelden tussen beheerbare inhoud en codegedreven structuur.
Technisch OntwerpTechnisch 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 SpecificatieBeschrijft requirements voor toegangscontrole, validaties, foutafhandeling, immutable history en afbakening van beheerbare velden.
Database-informatieBeschrijft of velden, constraints, historytabellen en sleutelsets voor SiteLinks, SiteLinkHistory, FooterSections, FooterLinkAssignments, FooterLinkAssignmentHistory, ContentBlocks, ContentBlockHistory volledig aansluiten op deze usecase.
Ontwerpbronnen en registersBeschrijven autorisatiematrix, business rules, command-register, event-register en eventuele popupmatrix bij.

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-afleidingDektUsecasecontext
REQ-UC-BEH-LINKS-005-001SRS-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-005-002SRS-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-005-003SRS-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-005-004SRS-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-005-005SRS-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-005-006SRS-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-005-007SRS-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-005-008SRS-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-005-009SRS-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-005-010SRS-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-005-011SRS-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-005-012SRS-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-005-013SRS-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-005-014SRS-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-005-015SRS-RDM-001
SRS-RDM-004
SRS-ADM-001
SRS-CNT-002
AC-RDM-001
AC-RDM-004
AC-ADM-001
AC-CNT-002
De usecase "Footertekst bewerken" uitvoeren volgens de afbakening van het subdomein Beheerder / Handige links en vaste pagina’s