UC-DOC-SAM-006 — Overdracht naar ongeldige kandidaat blokkeren
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-SAM-006 |
| Naam | Overdracht naar ongeldige kandidaat blokkeren |
| Domein | Docent |
| Subdomein | Samenwerking, collaborators en eigenaarschap |
| Primaire actor | Systeem |
| Secundaire actor(en) | Docent |
| Rolcontext | Docentcontext bij poging tot eigendomsoverdracht |
| Betrokken schermen | Docent - Eigenaarschap overdragen, routeguard, backendvalidatie |
| Gerelateerde usecases | UC-DOC-SAM-001, UC-DOC-SAM-002, UC-DOC-SAM-004, UC-DOC-SAM-005, UC-DOC-SAM-007 |
| Primaire entiteiten | Levels, LevelCollaborators, Users, UserRoles |
| Secundaire entiteiten / events | Autorisatiecontext, validatiefout, accountlogging, popupverwijzing |
| Gerelateerde popups | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED |
| Popupregister | Centrale popupregisterregel(en) op PopupKey-niveau. |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft de blokkeerroute wanneer een gebruiker probeert eigenaarschap van een niveau over te dragen aan een ongeldige kandidaat.
De usecase is bewust een negatieve autorisatie- en validatieflow bij UC-DOC-SAM-005. Hij voorkomt dat eigenaarschap via manipulatie van routeparameters, oude browserstate of handmatige API-aanroep buiten de toegestane collaboratorlijst terechtkomt.
Een ongeldige kandidaat kan bijvoorbeeld een docent zonder actieve collaboratorstatus zijn, een inactieve gebruiker, de actuele eigenaar zelf, een docent buiten de docent-docentrelatiecontext of een gebruiker zonder actieve docentrol.
De blokkade voert geen domeinmutatie uit. Technische beveiligingslogging blijft gescheiden van domeinhistorie; er ontstaat geen ownershiphistorie alsof er een overdracht heeft plaatsgevonden.
3. Scope
Binnen scope
- Server-side valideren van actor, niveau en kandidaat bij eigendomsoverdracht.
- Blokkeren van kandidaten die geen actieve collaborator zijn.
- Blokkeren van kandidaten zonder actieve docentrol of zonder geldig intern account.
- Blokkeren van overdracht naar de actuele eigenaar zelf.
- Blokkeren van overdracht wanneer het niveau niet meer bestaat of niet toegankelijk is.
- Teruggeven van veilige, niet-informatielekkende foutafhandeling.
- Technisch loggen van verdachte of inconsistente pogingen waar relevant.
Buiten scope
- Een geldige overdracht uitvoeren.
- Collaborators toevoegen om een kandidaat geldig te maken.
- Docent-docentrelaties aanmaken.
- Gebruikersrollen wijzigen.
- Beheerder-forceerroute voor uitzonderingen.
- Relatie-uitnodigingen versturen.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | Er wordt een poging gedaan om eigenaarschap over te dragen. |
| PRE-002 | Er is een opgegeven niveaucontext. |
| PRE-003 | Er is een opgegeven kandidaat voor nieuwe eigenaar. |
| PRE-004 | De backend kan actuele niveau-, rol- en collaboratorstatus opnieuw uitlezen. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De overdracht is niet uitgevoerd. |
| POST-002 | Levels.OwnerUserId is ongewijzigd gebleven. |
| POST-003 | Er is geen nieuwe ownershiphistorie voor een succesvolle overdracht aangemaakt. |
| POST-004 | De gebruiker krijgt een veilige blokkade- of validatieafhandeling. |
| POST-005 | Verdachte of inconsistente pogingen kunnen technisch zijn gelogd. |
6. Trigger
Een docent of client probeert eigenaarschap over te dragen aan een kandidaat die server-side niet voldoet aan de geldigheidsregels.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Docent / Client | Eigenaarschap overdragen | Verstuurt overdrachtsverzoek | Backend ontvangt command | TransferLevelOwnership |
| 2 | Systeem | Backend autorisatie | Laadt actor, niveau en kandidaat | Bepaalt actuele context | Users, Levels |
| 3 | Systeem | Backend autorisatie | Controleert of actor actuele eigenaar is | Blokkeert wanneer actor geen eigenaar is | Levels.OwnerUserId |
| 4 | Systeem | Kandidaatvalidatie | Controleert actieve docentrol kandidaat | Blokkeert kandidaten zonder actieve docentrol | UserRoles, Roles |
| 5 | Systeem | Kandidaatvalidatie | Controleert actieve collaboratorstatus kandidaat op dit niveau | Blokkeert kandidaten buiten collaboratorlijst | LevelCollaborators |
| 6 | Systeem | Kandidaatvalidatie | Controleert dat kandidaat niet gelijk is aan actuele eigenaar | Blokkeert noop-overdracht | Users.Id |
| 7 | Systeem | Kandidaatvalidatie | Controleert accountstatus kandidaat | Blokkeert gedeactiveerde of geanonimiseerde accounts | Users.IsActive |
| 8 | Systeem | Beslissing | Stelt vast dat kandidaat ongeldig is | Transactie wordt niet gestart of direct afgebroken | Business rules |
| 9 | Systeem | Logging | Legt technische of verdachte poging vast waar relevant | Geen domeinevent voor geslaagde overdracht | Account/applicatielog |
| 10 | Frontend | Eigenaarschap overdragen | Toont veilige blokkade-afhandeling | Geen datamutatie | Popup of routeguard |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 3 | Actor is geen actuele eigenaar | Systeem blokkeert de hele overdrachtsactie. | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Geen |
| ALT-002 | 4 | Kandidaat heeft geen actieve docentrol | Systeem weigert de kandidaat. | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Geen |
| ALT-003 | 5 | Kandidaat is geen actieve collaborator van dit niveau | Systeem weigert de kandidaat. | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Geen |
| ALT-004 | 6 | Kandidaat is dezelfde gebruiker als huidige eigenaar | Systeem weigert de overdracht omdat er geen nieuwe eigenaar ontstaat. | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Geen |
| ALT-005 | 7 | Kandidaataccount is gedeactiveerd of geanonimiseerd | Systeem weigert de kandidaat. | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Geen |
| ALT-006 | 2 | Niveau bestaat niet of is niet toegankelijk | Systeem toont niet-beschikbaarafhandeling zonder objectdetails te lekken. | Niet van toepassing | Geen |
| ALT-007 | 1 | Verzoek komt via directe API-aanroep met gemanipuleerde IDs | Backend voert dezelfde validaties uit en blokkeert het verzoek. | Niet van toepassing | Geen |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Een ongeldige kandidaat mag nooit eigenaar van een niveau worden. |
| BR-002 | De backend valideert actor en kandidaat onafhankelijk van de UI. |
| BR-003 | Alleen actieve collaborators van hetzelfde niveau zijn geldige eigenaarschapskandidaten. |
| BR-004 | Een kandidaat moet een actief intern account en een actieve docentrol hebben. |
| BR-005 | Overdracht naar de actuele eigenaar zelf is niet toegestaan als eigendomsoverdracht. |
| BR-006 | Een blokkade schrijft geen succesvolle ownershiphistorie. |
| BR-007 | Foutmeldingen mogen geen ongeautoriseerde informatie over gebruikers of niveaus lekken. |
| BR-008 | Herhaald ongeldige of verdachte pogingen mogen technisch worden gelogd. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| ActorUserId | Moet actuele eigenaar zijn voor het niveau. |
| CandidateUserId | Moet bestaan, actief zijn en een actieve docentrol hebben. |
| LevelCollaborator | Moet actief zijn voor dezelfde LevelId. |
| SelfTransfer | Kandidaat mag niet gelijk zijn aan de huidige eigenaar. |
| LevelContext | Moet bestaan en beschikbaar zijn voor actor. |
| ErrorResponse | Moet veilig zijn en geen ongeautoriseerde objectdetails tonen. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 9 | Log | Applicatielog/accountlog | Ongeldige of verdachte poging kan technisch worden vastgelegd. |
| 8 | Geen domeinmutatie | Levels | OwnerUserId blijft ongewijzigd. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Levels | Eigenaarschap wordt niet gewijzigd. |
| LevelCollaborators | Er wordt geen collaborator aangemaakt, geactiveerd of gedeactiveerd. |
| LevelOwnershipHistory | Er wordt geen succesvolle overdracht geregistreerd. |
| SystemMessages | Er wordt geen overdrachtsbericht aangemaakt voor een mislukte overdracht. |
| UserRelationships | Relaties worden niet gewijzigd. |
| UserRoles | Rollen worden niet gewijzigd. |
13. State diagram
Er is geen toegestane state transition. Het niveau blijft in de bestaande eigenaarschapstoestand.
14. Decision flow
De decision flow toont dat één falende validatie voldoende is om de overdracht te blokkeren.
15. Data lifecycle diagram
Bij een geblokkeerde overdracht blijven alle bronrecords ongewijzigd. Alleen veilige foutafhandeling en technische beveiligingslogging buiten de domeinhistorie kunnen plaatsvinden.
16. Sequence diagrammen
16.1 Ongeldige kandidaat blokkeren
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Wanneer kandidaat of actor ongeldig is | Voorkomt onduidelijke of technische foutafhandeling voor de gebruiker. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijven dat alleen actieve collaborators geldige eigenaarschapskandidaten zijn en dat ongeldige kandidaten veilig worden geblokkeerd. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, autorisatie en logging en historie beschrijven de technische uitwerking. Server-side validatie, foutafhandeling, logging en geen-mutatiegedrag uitwerken. |
| Software Requirements Specification | Requirements opnemen voor blokkeren van ongeldige kandidaat, directe API-aanroepen en veilige foutafhandeling. |
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-SAM-006-001 | SRS-AUTH-001 SRS-TCH-001 AC-AUTH-001 AC-TCH-001 | Eigendomsoverdracht blokkeren wanneer de actor niet de actuele eigenaar is |
REQ-UC-DOC-SAM-006-002 | SRS-AUTH-001 SRS-CAT-001 SRS-TCH-006 AC-AUTH-001 AC-CAT-001 AC-TCH-006 | Eigendomsoverdracht blokkeren wanneer de kandidaat geen actieve collaborator van het niveau is |
REQ-UC-DOC-SAM-006-003 | SRS-AUTH-001 SRS-TCH-001 AC-AUTH-001 AC-TCH-001 | Eigendomsoverdracht blokkeren wanneer de kandidaat geen actieve docentrol heeft |
REQ-UC-DOC-SAM-006-004 | SRS-AUTH-001 SRS-TCH-001 SRS-NFR-PRV-001 AC-AUTH-001 AC-TCH-001 AC-NFR-PRV-001 | Eigendomsoverdracht blokkeren wanneer de kandidaat gedeactiveerd of geanonimiseerd is |
REQ-UC-DOC-SAM-006-005 | SRS-AUTH-001 SRS-TCH-001 AC-AUTH-001 AC-TCH-001 | Eigendomsoverdracht naar de huidige eigenaar zelf blokkeren |
REQ-UC-DOC-SAM-006-006 | SRS-TCH-001 AC-TCH-001 | Bij een geblokkeerde overdracht geen succesvolle ownershiphistorie schrijven |
REQ-UC-DOC-SAM-006-007 | SRS-TCH-001 AC-TCH-001 | Directe of gemanipuleerde API-aanroepen met dezelfde validaties behandelen als UI-acties |
REQ-UC-DOC-SAM-006-008 | SRS-AUTH-001 SRS-TCH-001 SRS-NFR-SEC-001 SRS-NFR-AVL-001 AC-AUTH-001 AC-TCH-001 AC-NFR-SEC-001 AC-NFR-AVL-001 | Veilige foutafhandeling tonen zonder ongeautoriseerde details te lekken |