11. Profiel
11.1 Schermafbeelding

11.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-GEN-11-01 |
| Schermnaam | Profiel |
| Doelgroep / onderdeel | Generiek |
| Bronbestand | oefenhub_generiek_09_profiel_v1_3.html |
| Mockupversie | V1.3 |
| Screenshotbestand | oefenhub_generiek_09_profiel_v1_3.png |
| Processtap / context | Ingelogde gebruiker opent de eigen profielpagina om profielgegevens, profielfoto, actief niveau en accountgerelateerde acties te bekijken of te wijzigen. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende database- en architectuurinformatie. |
| Opmerkingen | Header, profielmenu, berichtenteller en footer vallen buiten het bereik van dit schermdocument. Zichtbare waarden zoals naam, e-mailadres, niveau, avatarletter, beveiligingsstatus en aanmeldtijd zijn dynamische voorbeeldwaarden. |
| Route / URL-patroon | Generieke profielroute binnen ingelogde gebruikerscontext, functioneel bijvoorbeeld Profiel. |
| Autorisatie / vereiste rol-context | Ingelogde gebruiker. De gebruiker mag uitsluitend het eigen profiel bekijken en wijzigen. Server-side autorisatie bepaalt de gebruiker op basis van de sessie en niet op basis van clientinput. |
| Primair domeinobject / hoofdentiteit | Users, UserSettings, ProfileAvatars, externe identity-provideraccountgegevens en rol-/niveaucontext. |
| Gerelateerde schermen / navigatie | 09_toegankelijk, 10_voorkeuren, 08_relaties, 06_meldingen, accountomgeving voor wachtwoordwijziging. |
| Data-karakter | Profiel- en accountgegevens met beperkte mutaties. Authenticatiegegevens en wachtwoordbeheer blijven onder verantwoordelijkheid van de identity provider; OefenHub beheert het applicatieprofiel en profielgerelateerde voorkeuren. |
11.3 Functionele beschrijving
Het scherm Profiel is de centrale pagina waarop een ingelogde gebruiker de eigen profielgegevens binnen OefenHub beheert. De pagina toont het profiel als applicatieprofiel en scheidt dit bewust van algemene voorkeuren, toegankelijkheidsinstellingen en de onderliggende accountomgeving.
De hoofdinhoud bestaat uit:
- een breadcrumb Home > Profiel;
- een introductieblok met uitleg over profielgegevens en verwijzingen naar Voorkeuren en Toegankelijkheid;
- een kaart Profielfoto met huidige avatarweergave en avataracties;
- een kaart Persoonsgegevens met profielvelden en actief niveau;
- een kaart Accountbeveiliging met statusinformatie en een actie voor wachtwoordwijziging.
Header, profielmenu, berichteningang, navigatiebalk en footer worden in dit document niet als UI-element van dit scherm uitgewerkt.
11.3.1 Interpretatie van mockupwaarden
Alle zichtbare waarden in de mockup zijn voorbeeldwaarden. Namen zoals Emma Jansen, het e-mailadres emma.jansen@voorbeeld.nl, het actieve niveau Basisschool – Groep 7, de avatarletter E, de beveiligingsstatussen en de tekst Vandaag om 08:14 worden dynamisch opgebouwd uit de actuele gebruiker, accountstatus en beschikbare niveaucontext.
Mockupwaarden mogen daarom niet als vaste productiegegevens worden beschreven of geïmplementeerd.
11.3.2 Profiel versus voorkeuren en toegankelijkheid
Deze pagina bevat profielgegevens: naamgegevens, e-mailadres, actief niveau en profielfoto. Algemene gebruiksinstellingen horen bij Voorkeuren en instellingen voor leesbaarheid, contrast, dyslexielettertype en tekstgrootte horen bij Toegankelijkheid. De introductietekst benoemt deze scheiding functioneel, maar de andere pagina’s worden niet binnen dit scherm uitgewerkt.
De opslag volgt dezelfde domeinscheiding:
- basisprofielgegevens staan bij de gebruiker in
Users; - niet-profielgebonden instellingen staan in
UserSettings; - profielafbeeldingen verwijzen naar vooraf gedefinieerde
ProfileAvatars; - authenticatie, wachtwoorden, sessies en credential lifecycle verlopen via de identity provider.
11.3.3 Profielfoto
De kaart Profielfoto toont de huidige profielweergave. Wanneer een gebruiker geen avatar heeft gekozen, toont de pagina een initialenweergave op basis van de profielnaam. Wanneer een avatar is gekozen, toont de pagina de vooraf gedefinieerde avatar die via Users.ProfileAvatarId naar ProfileAvatars verwijst.
De actie Afbeelding kiezen opent een selectieflow met toegestane vooraf gedefinieerde profielafbeeldingen. Vrije upload van afbeeldingen is niet toegestaan. De actie Avatar verwijderen verwijdert de avatarverwijzing voor de gebruiker, waarna opnieuw de initialenweergave wordt gebruikt.
11.3.4 Persoonsgegevens
De kaart Persoonsgegevens bevat de bewerkbare profielvelden:
- Voornaam;
- Tussenvoegsel;
- Achternaam;
- E-mailadres;
- Actief niveau;
- Profiel opslaan.
Bij opslaan verwerkt het systeem de profielmutatie server-side. De gebruiker mag alleen het eigen profiel wijzigen. De server bepaalt de doelgebruiker uit de sessie en mag geen gebruikers-ID uit het formulier vertrouwen.
Het veld Voornaam is verplicht. Tussenvoegsel is optioneel, maar de systeemwaarde # is gereserveerd voor geanonimiseerde accounts en mag via de normale gebruikersinterface niet worden opgeslagen. Achternaam is profieldata en mag afhankelijk van de definitieve validatieregel leeg of gevuld zijn; de server gebruikt de opgeslagen naamdelen om de zichtbare naam en DisplayName consistent te houden.
Het veld E-mailadres toont het account-e-mailadres dat OefenHub kent. Omdat authenticatie en e-mailverificatie via de identity provider verlopen, mag OefenHub een e-mailwijziging wel vanuit deze pagina starten, maar de daadwerkelijke accountverwerking en verificatie verlopen via de onderliggende accountomgeving. Een niet-geverifieerde of conflicterende wijziging mag niet stilzwijgend als definitieve accountwijziging worden behandeld.
11.3.5 Actief niveau
Het veld Actief niveau toont de actuele niveaucontext die voor de gebruiker beschikbaar is. De opties in de keuzelijst zijn geen vaste waarden uit de mockup. Zij worden opgebouwd uit de toegestane niveaus voor de gebruiker en rolcontext.
Voor een leerling bestaat de beschikbare set uit niveaus waartoe de leerling toegang heeft. Voor gebruikers zonder relevante niveaucontext wordt het veld niet als vrije invoer gebruikt. De selectie wordt opgeslagen als gebruikersinstelling, bijvoorbeeld via UserSettings.SelectedTeacherLevelId of een functioneel gelijkwaardige contextwaarde.
Wanneer een gebruiker na registratie een verplicht niveau mist, moet de applicatie de gebruiker naar de profielpagina leiden. Wanneer de gebruiker de profielpagina verlaat zonder een verplicht niveau in te stellen, toont de profielpagina een gewone popup zonder donkere overlay om duidelijk te maken dat dit veld nodig is voor normaal gebruik.
11.3.6 Accountbeveiliging
De kaart Accountbeveiliging toont statusinformatie over accountbeveiliging, maar beheert credentials niet rechtstreeks binnen OefenHub. De kaart bevat minimaal:
- Wachtwoord met statuslabel;
- E-mailadres bevestigd met statuslabel;
- Laatste aanmelding met statuslabel;
- de actie Wachtwoord wijzigen;
- een toelichting dat authenticatie en wachtwoorden via de onderliggende accountoplossing worden beheerd.
De actie Wachtwoord wijzigen start een veilige stap in de identity provider, bijvoorbeeld Keycloak. OefenHub mag wachtwoorden nooit lezen, opslaan of als formulierwaarde verwerken. Statusinformatie zoals e-mailverificatie of laatste aanmelding wordt uit de identity-providercontext, de gebruikerscontext of een veilige gesynchroniseerde accountstatus opgebouwd en is in deze kaart read-only.
11.3.7 Leegstaten, foutstaten en disabled states
Wanneer een profiel nog geen avatar heeft, toont de pagina initialen. Wanneer geen actieve avatarselectie beschikbaar is, wordt Afbeelding kiezen uitgeschakeld of wordt een foutmelding getoond na de actie.
Wanneer een gebruiker geen beschikbare niveaus heeft, toont het veld Actief niveau geen willekeurige mockupwaarde. Als een niveau verplicht is, krijgt de gebruiker een duidelijke melding dat eerst een niveau gekozen of beschikbaar gemaakt moet worden. Als een niveau voor de huidige rolcontext niet relevant is, mag het veld verborgen of read-only worden weergegeven.
Wanneer opslaan mislukt door validatie, identity-providerconflict, netwerkfout of serverfout, blijft de ingevoerde gebruikersinvoer zichtbaar en toont het systeem een begrijpelijke foutmelding. Technische foutdetails, interne GUID’s, externe identity-provider-ID’s en stacktraces worden niet aan de gebruiker getoond.
Wanneer het account inactief, geanonimiseerd of in een afgeschermde beheerstatus staat, mag deze profielpagina niet als normale bewerkpagina functioneren. Server-side autorisatie en accountstatuscontrole bepalen dan welke acties beschikbaar zijn.
11.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-GEN-11-01-N01 | Navigation | Breadcrumb | Navigatiecontext binnen de hoofdinhoud van de pagina. | Home > Profiel | Headernavigatie valt buiten scope; breadcrumb hoort bij de pagina-inhoud. | ProfileBreadcrumb |
| SCH-GEN-11-01-S01 | Section | Introblok | Introductiekaart van het profielscherm. | Profiel | Beschrijft het doel van de pagina en verwijst tekstueel naar voorkeuren en toegankelijkheid. | ProfileIntroSection |
| SCH-GEN-11-01-F01 | Field | Introblok — titel | Titel van het scherm. | Profiel | Read-only schermlabel. | ProfilePageTitle |
| SCH-GEN-11-01-F02 | Field | Introblok — toelichting | Toelichting op profielgegevens en scheiding met voorkeuren/toegankelijkheid. | Op deze pagina beheer je je profielgegevens binnen OefenHub... | Tekst is informatief; links of vetgedrukte woorden verwijzen functioneel naar andere profielonderdelen. | ProfileIntroText |
| SCH-GEN-11-01-S02 | Section | Kaart rechtsboven | Kaart met huidige profielfoto of initialenweergave. | Profielfoto | Toont avatarweergave en avataracties. | ProfileAvatarSection |
| SCH-GEN-11-01-F03 | Field | Profielfoto — huidige weergave | Grote avatarweergave. | Huidige weergave | Toont gekozen avatar of initialen wanneer geen avatar is gekozen. | CurrentAvatarDisplay |
| SCH-GEN-11-01-F04 | Field | Profielfoto — hint | Uitleg bij de avatarweergave. | Je initialen worden gebruikt zolang er geen afbeelding is gekozen. | Alleen informatief. | AvatarFallbackHint |
| SCH-GEN-11-01-B01 | Button | Profielfoto — actie | Opent selectie van toegestane avatars. | Afbeelding kiezen | Geen vrije upload; alleen vooraf gedefinieerde avatars. | ChooseAvatarButton |
| SCH-GEN-11-01-A01 | Action | Profielfoto — actie | Verwijdert de huidige avatarverwijzing. | Avatar verwijderen | Zet profielafbeelding terug naar initialenweergave. | RemoveAvatarAction |
| SCH-GEN-11-01-S03 | Section | Kaart Persoonsgegevens | Formuliersectie voor profielgegevens. | Persoonsgegevens | Bevat naam, e-mail, actief niveau en opslaan. | PersonalDetailsSection |
| SCH-GEN-11-01-F05 | Field | Persoonsgegevens — voornaam | Invoer voor voornaam. | Voornaam | Verplicht profielveld. | FirstNameInput |
| SCH-GEN-11-01-F06 | Field | Persoonsgegevens — tussenvoegsel | Invoer voor tussenvoegsel. | Tussenvoegsel | Optioneel; # is gereserveerd voor systeemgebruik. | MiddleNameInput |
| SCH-GEN-11-01-F07 | Field | Persoonsgegevens — achternaam | Invoer voor achternaam. | Achternaam | Onderdeel van naamweergave. | LastNameInput |
| SCH-GEN-11-01-F08 | Field | Persoonsgegevens — e-mailadres | Invoer of startpunt voor wijziging van e-mailadres. | E-mailadres | Verwerking en verificatie lopen via de identity provider. | EmailAddressInput |
| SCH-GEN-11-01-F09 | Field | Persoonsgegevens — actief niveau | Keuzelijst voor actuele niveaucontext. | Actief niveau | Opties zijn dynamisch en afhankelijk van gebruiker en autorisatiecontext. | ActiveLevelSelect |
| SCH-GEN-11-01-F10 | Field | Persoonsgegevens — niveauhint | Uitleg bij niveaukeuze. | Als je meerdere niveaus hebt, kun je hier wisselen... | Alleen tonen wanneer de uitleg relevant is. | ActiveLevelHint |
| SCH-GEN-11-01-B02 | Button | Persoonsgegevens — onderaan | Slaat gewijzigde profielgegevens op. | Profiel opslaan | Mutatie vindt server-side plaats voor de ingelogde gebruiker. | SaveProfileButton |
| SCH-GEN-11-01-S04 | Section | Kaart Accountbeveiliging | Read-only statusinformatie en veilige accountactie. | Accountbeveiliging | Beveiligingsacties verwijzen naar de identity provider. | AccountSecuritySection |
| SCH-GEN-11-01-F11 | Field | Accountbeveiliging — wachtwoord | Statusregel over wachtwoordbeheer. | Wachtwoord | Geen wachtwoordwaarde tonen. | PasswordSecurityStatus |
| SCH-GEN-11-01-F12 | Field | Accountbeveiliging — e-mailadres bevestigd | Statusregel over e-mailverificatie. | E-mailadres bevestigd | Afgeleid uit identity-providerstatus of gesynchroniseerde accountstatus. | EmailVerifiedStatus |
| SCH-GEN-11-01-F13 | Field | Accountbeveiliging — laatste aanmelding | Laatste bekende aanmeld- of activiteitsinformatie. | Laatste aanmelding | Datum/tijd is dynamisch en lokaal geformatteerd. | LastSignInStatus |
| SCH-GEN-11-01-F14 | Field | Accountbeveiliging — statuschip wachtwoord | Visueel statuslabel bij wachtwoord. | Beveiligd | Dynamisch statuslabel; geen beveiligingsgeheim. | PasswordStatusBadge |
| SCH-GEN-11-01-F15 | Field | Accountbeveiliging — statuschip e-mail | Visueel statuslabel bij e-mailverificatie. | Bevestigd | Dynamisch statuslabel. | EmailVerifiedBadge |
| SCH-GEN-11-01-F16 | Field | Accountbeveiliging — statuschip aanmelding | Visueel statuslabel bij laatste aanmelding. | Recent | Afgeleid label, geen vaste waarde. | LastSignInBadge |
| SCH-GEN-11-01-B03 | Button | Accountbeveiliging — actie | Start beveiligde wachtwoordwijziging in de accountomgeving. | Wachtwoord wijzigen | OefenHub verwerkt geen wachtwoordwaarde. | ChangePasswordButton |
| SCH-GEN-11-01-M01 | Message | Accountbeveiliging — infonotitie | Toelichting over scheiding tussen OefenHub-profiel en accountomgeving. | Authenticatie en wachtwoorden worden beheerd via de onderliggende accountoplossing. | Informatieve melding. | AccountSecurityInfoMessage |
| SCH-GEN-11-01-M02 | Message / modal | Verplicht niveau ontbreekt | Popup binnen de profielpagina wanneer een verplicht niveau ontbreekt bij verlaten of opslaan. | Stel eerst je niveau in | Geen donkere overlay binnen de profielpagina. | MissingRequiredLevelMessage |
| SCH-GEN-11-01-M03 | Message | Validatiefout | Gebruikersgerichte foutmelding bij ongeldige invoer of mislukte verwerking. | <foutmelding> | Geen technische details of interne identifiers tonen. | ProfileValidationMessage |
11.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-GEN-11-01-N01 | Breadcrumb | Home > Profiel | ProfileBreadcrumb | Routeconfiguratie | Afgeleid uit huidige route | Navigation label | Nee | Geen technische URL of ID tonen. |
| SCH-GEN-11-01-F01 | Introblok — titel | Profiel | ProfilePageTitle | Codegedreven schermlabel of contentblok indien beheerbaar gemaakt | Weergavetekst | String | Nee | Moet overeenkomen met de schermfunctie. |
| SCH-GEN-11-01-F02 | Introblok — toelichting | Profieltoelichting | ProfileIntroText | Codegedreven tekst of contentblok indien beheerbaar gemaakt | Weergavetekst | String / rich text beperkt | Nee | Mag voorkeuren en toegankelijkheid verwijzen, maar werkt deze pagina’s niet inhoudelijk uit. |
| SCH-GEN-11-01-F03 | Profielfoto | Huidige weergave | CurrentAvatarDisplay | Users.ProfileAvatarId, ProfileAvatars, Users.FirstName, Users.LastName, Users.DisplayName | Database of afgeleide initialen | Avatar display | Nee | Toon gekozen avatar wanneer actief; anders initialenweergave. |
| SCH-GEN-11-01-B01 | Profielfoto | Afbeelding kiezen | ChooseAvatarButton | ProfileAvatars.IsActive | User action | Action | Ja | Alleen vooraf gedefinieerde actieve avatars selecteerbaar; vrije upload niet toestaan. |
| SCH-GEN-11-01-A01 | Profielfoto | Avatar verwijderen | RemoveAvatarAction | Users.ProfileAvatarId | User action / databasemutatie | Action | Ja | Zet avatarverwijzing naar null voor de ingelogde gebruiker; initialen blijven beschikbaar. |
| SCH-GEN-11-01-F05 | Persoonsgegevens | Voornaam | FirstNameInput | Users.FirstName | Databasewaarde / user input | String | Ja | Verplicht; trimmen; maximale lengte conform database; veilig encoden bij rendering. |
| SCH-GEN-11-01-F06 | Persoonsgegevens | Tussenvoegsel | MiddleNameInput | Users.MiddleName | Databasewaarde / user input | String nullable | Ja | Optioneel; waarde # is gereserveerd voor geanonimiseerde accounts en mag niet via normale UI worden opgeslagen. |
| SCH-GEN-11-01-F07 | Persoonsgegevens | Achternaam | LastNameInput | Users.LastName | Databasewaarde / user input | String nullable | Ja | Trim en maximale lengte afdwingen; veilig encoden bij rendering. |
| SCH-GEN-11-01-F08 | Persoonsgegevens | E-mailadres | EmailAddressInput | Users.Email + identity-provideraccount | Databasewaarde en identity-providerstatus | E-mailadres | Ja, als wijziging is toegestaan | Geldig e-mailformaat; uniek/case-insensitive; definitieve wijziging mag pas na identity-providerverwerking en verificatie gelden. |
| SCH-GEN-11-01-F09 | Persoonsgegevens | Actief niveau | ActiveLevelSelect | UserSettings.SelectedTeacherLevelId, toegestane TeacherLevels of gelijkwaardige niveaucontext | Databasewaarde / afgeleide toegestane opties | GUID-selectie als displaylabel | Ja, wanneer meerdere geldige opties bestaan | Alleen niveaus tonen waarvoor de gebruiker functioneel toegang heeft; geen technische ID tonen. |
| SCH-GEN-11-01-F10 | Persoonsgegevens | Niveauhint | ActiveLevelHint | Schermlogica | Afgeleid uit beschikbaarheid van meerdere niveaus | String | Nee | Alleen tonen wanneer het helpt bij keuze of wisselen tussen niveaus. |
| SCH-GEN-11-01-B02 | Persoonsgegevens | Profiel opslaan | SaveProfileButton | Ingevoerde profielwaarden + ingelogde gebruiker | User action | Action | Ja | Server-side validatie en autorisatie verplicht; alleen eigen profiel muteren. |
| SCH-GEN-11-01-F11 | Accountbeveiliging | Wachtwoord | PasswordSecurityStatus | Identity provider | Afgeleide accountstatus | String/status | Nee | Geen wachtwoordwaarde tonen of opslaan in OefenHub. |
| SCH-GEN-11-01-F12 | Accountbeveiliging | E-mailadres bevestigd | EmailVerifiedStatus | Identity provider of gesynchroniseerde accountstatus | Afgeleide accountstatus | Boolean/status display | Nee | Status moet de actuele verificatiecontext weergeven. |
| SCH-GEN-11-01-F13 | Accountbeveiliging | Laatste aanmelding | LastSignInStatus | Identity provider, Users.LastSeenAtUtc of veilige sessie-/accountcontext | Afgeleid tijdstip | DateTime display | Nee | UTC-bron lokaal formatteren; geen gevoelige sessiegegevens tonen. |
| SCH-GEN-11-01-F14 | Accountbeveiliging | Beveiligd | PasswordStatusBadge | Identity-providerstatus | Afgeleid label | String/status | Nee | Label is informatief en mag geen beveiligingsdetail lekken. |
| SCH-GEN-11-01-F15 | Accountbeveiliging | Bevestigd | EmailVerifiedBadge | Identity-providerstatus | Afgeleid label | String/status | Nee | Label dynamisch bepalen. |
| SCH-GEN-11-01-F16 | Accountbeveiliging | Recent | LastSignInBadge | Laatste aanmeld-/activiteitstijd | Afgeleid label | String/status | Nee | Label dynamisch bepalen op basis van tijdvenster of accountstatus. |
| SCH-GEN-11-01-B03 | Accountbeveiliging | Wachtwoord wijzigen | ChangePasswordButton | Identity-providerintegratie | User action | Action | Ja | Start beveiligde externe/accountflow; OefenHub verwerkt geen wachtwoordvelden. |
| SCH-GEN-11-01-M01 | Accountbeveiliging | Accounttoelichting | AccountSecurityInfoMessage | Schermtekst | Weergavetekst | String | Nee | Moet duidelijk maken dat authenticatie buiten OefenHub wordt beheerd. |
| SCH-GEN-11-01-M02 | Niveau ontbreekt | Stel eerst je niveau in | MissingRequiredLevelMessage | Validatie van profiel- en rolcontext | Runtime state | Message/modal | Nee | Tonen wanneer een verplicht niveau ontbreekt; binnen profielpagina zonder donkere overlay. |
| SCH-GEN-11-01-M03 | Validatie | <foutmelding> | ProfileValidationMessage | Server-side validatie, identity-providerrespons of opslagresultaat | Runtime state | Message | Nee | Gebruikersgericht formuleren; geen GUID’s, stacktraces, ExternalId of technische foutdetails tonen. |
11.6 Schermtrace naar SRS en acceptatiecriteria
De onderstaande tabel legt per schermrequirement de koppeling naar het centrale schermrequirements-trace-register, SRS-requirements en acceptatiecriteria vast. De normatieve requirementtekst staat in de SRS; dit schermdocument beschrijft alleen de lokale schermcontext.
Deze tabel bevat alleen schermtraceability. De normatieve requirementtekst en acceptatiecriteria staan centraal in de SRS.
| Schermrequirement | Dekt | Schermcontext |
|---|---|---|
REQ-SCH-GEN-11-01-01 | SRS-AUTH-001 SRS-ACC-003 AC-AUTH-001 AC-ACC-003 | Voor iedere ingelogde gebruiker een profielpagina kunnen tonen met uitsluitend de eigen profielgegevens |
REQ-SCH-GEN-11-01-02 | SRS-AUTH-001 SRS-ACC-003 AC-AUTH-001 AC-ACC-003 | Server-side afdwingen dat een gebruiker via deze pagina alleen het eigen profiel kan bekijken en wijzigen |
REQ-SCH-GEN-11-01-03 | SRS-RDM-007 SRS-RDM-002 SRS-RDM-001 SRS-ACC-003 AC-RDM-007 AC-RDM-002 AC-RDM-001 AC-ACC-003 | Header, profielmenu, berichtenteller en footer mogen geen onderdeel vormen van de functionele uitwerking van dit profielscherm |
REQ-SCH-GEN-11-01-04 | SRS-ACC-003 AC-ACC-003 | Het profielscherm uitleggen dat algemene voorkeuren en toegankelijkheidsinstellingen op afzonderlijke pagina’s beheerd worden |
REQ-SCH-GEN-11-01-05 | SRS-ACC-003 AC-ACC-003 | Profielgegevens tonen en verwerken op basis van dynamische gebruikerdata en mag mockupwaarden niet hardcoded gebruiken |
REQ-SCH-GEN-11-01-06 | SRS-ARCH-002 AC-ARCH-002 | Minimaal voornaam, tussenvoegsel, achternaam, e-mailadres en actief niveau als profielvelden kunnen tonen |
REQ-SCH-GEN-11-01-07 | SRS-ACC-003 AC-ACC-003 | De voornaam als verplicht profielgegeven valideren |
REQ-SCH-GEN-11-01-08 | SRS-NFR-PRV-001 SRS-ACC-003 AC-NFR-PRV-001 AC-ACC-003 | Het systeem mag de waarde # niet via de normale profielinterface als tussenvoegsel accepteren, omdat deze waarde gereserveerd is voor systeemgebruik bij anonimisering |
REQ-SCH-GEN-11-01-09 | SRS-ACC-003 AC-ACC-003 | Naamvelden veilig opslaan en renderen zodat ingevoerde tekst niet als actieve HTML of script wordt uitgevoerd |
REQ-SCH-GEN-11-01-10 | SRS-ACC-003 AC-ACC-003 | Na profielwijzigingen de zichtbare naam of DisplayName consistent houden met de opgeslagen profielgegevens |
REQ-SCH-GEN-11-01-11 | SRS-ARCH-002 AC-ARCH-002 | E-mailadressen valideren op formaat en unieke, case-insensitive verwerking |
REQ-SCH-GEN-11-01-12 | SRS-ARCH-002 AC-ARCH-002 | Een wijziging van e-mailadres geen buiten de identity-providerverwerking en verificatie om als definitieve authenticatiewijziging gelden |
REQ-SCH-GEN-11-01-13 | SRS-ARCH-002 AC-ARCH-002 | Het systeem mag Users.ExternalId of andere identity-providerkoppelsleutels niet in de profielinterface tonen of bewerkbaar maken |
REQ-SCH-GEN-11-01-14 | SRS-AUTH-001 SRS-ACC-003 AC-AUTH-001 AC-ACC-003 | De beschikbare opties voor Actief niveau opbouwen uit niveaus waarvoor de gebruiker functioneel toegang heeft |
REQ-SCH-GEN-11-01-15 | SRS-AUTH-001 SRS-ACC-003 AC-AUTH-001 AC-ACC-003 | Het systeem mag bij Actief niveau geen niveau tonen of opslaan waarvoor de ingelogde gebruiker geen geldige toegang of context heeft |
REQ-SCH-GEN-11-01-16 | SRS-ACC-003 AC-ACC-003 | Wanneer een verplicht niveau ontbreekt, de profielpagina de gebruiker duidelijk maken dat dit niveau ingesteld wordt voordat normaal gebruik mogelijk is |
REQ-SCH-GEN-11-01-17 | SRS-ACC-003 AC-ACC-003 | Wanneer een gebruiker de profielpagina verlaat zonder verplicht niveau in te stellen, de melding binnen de profielpagina als gewone popup zonder donkere overlay kunnen verschijnen |
REQ-SCH-GEN-11-01-18 | SRS-ACC-003 AC-ACC-003 | Het gekozen actieve niveau persistent opslaan als gebruikersinstelling of gelijkwaardige niveaucontext |
REQ-SCH-GEN-11-01-19 | SRS-ACC-003 AC-ACC-003 | Een profielafbeelding tonen op basis van een vooraf gedefinieerde avatar of, bij ontbreken daarvan, een initialenweergave |
REQ-SCH-GEN-11-01-20 | SRS-ACC-003 AC-ACC-003 | Het systeem mag gebruikers geen vrije profielafbeelding laten uploaden via deze pagina |
REQ-SCH-GEN-11-01-21 | SRS-ACC-003 AC-ACC-003 | De actie Afbeelding kiezen mag uitsluitend actieve, vooraf goedgekeurde profielavatars aanbieden |
REQ-SCH-GEN-11-01-22 | SRS-AUTH-001 SRS-ACC-003 AC-AUTH-001 AC-ACC-003 | De actie Avatar verwijderen de avatarverwijzing van de ingelogde gebruiker verwijderen zonder het gebruikersrecord zelf te verwijderen |
REQ-SCH-GEN-11-01-23 | SRS-ARCH-002 AC-ARCH-002 | Accountbeveiligingsinformatie tonen zonder wachtwoorden, tokens, secrets of gevoelige sessiedetails zichtbaar te maken |
REQ-SCH-GEN-11-01-24 | SRS-ARCH-002 AC-ARCH-002 | De actie Wachtwoord wijzigen een veilige account- of identity-providerflow starten en mag geen wachtwoordwaarde in OefenHub verwerken |
REQ-SCH-GEN-11-01-25 | SRS-ARCH-002 AC-ARCH-002 | Statusinformatie zoals e-mailbevestiging en laatste aanmelding dynamisch tonen op basis van identity-providerstatus, gebruikerscontext of veilige gesynchroniseerde accountstatus |
REQ-SCH-GEN-11-01-26 | SRS-ACC-003 AC-ACC-003 | Datum- en tijdwaarden, zoals laatste aanmelding of laatste activiteit, vanuit UTC of accountbron consistent lokaal worden weergegeven |
REQ-SCH-GEN-11-01-27 | SRS-ACC-003 AC-ACC-003 | Bij validatie- of opslagfouten het systeem een begrijpelijke foutmelding tonen en de invoer van de gebruiker behouden waar dat veilig kan |
REQ-SCH-GEN-11-01-28 | SRS-AUTH-004 SRS-ARCH-002 AC-AUTH-004 AC-ARCH-002 | Het profielscherm mag geen interne GUID’s, externe identity-provider-ID’s, stacktraces of technische foutdetails aan de gebruiker tonen |
REQ-SCH-GEN-11-01-29 | SRS-AUTH-001 SRS-NFR-PRV-001 AC-AUTH-001 AC-NFR-PRV-001 | Gedeactiveerde of geanonimiseerde accounts server-side afvangen en mag deze pagina dan niet als normale bewerkpagina laten functioneren |
REQ-SCH-GEN-11-01-30 | SRS-NFR-AUD-001 SRS-ACC-003 AC-NFR-AUD-001 AC-ACC-003 | Profielmutaties herleidbaar zijn via de algemene audit-, logging- of accountlifecycle-afspraken die voor OefenHub gelden |
11.7 Technische koppeling
Voor technische uitwerking zijn vooral relevant:
- 04 Identiteit, authenticatie en rolcontext voor
Users,UserSettings,ProfileAvatars,Users.ProfileAvatarIdenUserSettings.SelectedTeacherLevelId. - 05 Autorisatie, policies en server-side contextcontrole voor het server-side begrenzen van niveaukeuzes en profielmutaties.
- 19 Logging, audit, securitylogging en technische foutafhandeling voor herleidbaarheid van profielmutaties zonder gevoelige foutdetails te tonen.
- 20 Security, infrastructuur, secrets en omgevingen voor identity-providerkoppeling, wachtwoordflows en browserstatebegrenzing.
- 24 Frontend, Blazor, routing, state en componentopbouw voor profielcomponenten, avatarselectie en veilige UI-state.
- 25 Privacy, retentie, anonimisering en gegevensbescherming voor anonimisering,
#als gereserveerde tussenvoegselwaarde en minimale gegevensweergave.