Altinn / Altinn/altinn-studio-docs

Introkurs/Modul 5: "Validering av innsender" er uklar

Open
#677 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
CSS
Stars
15
Forks
58
Avg merge
1d 11h
Merged PRs (30d)
53

Description

Gjennomførte nylig introkurset, og oppgaven [**Validering av innsender**](https://docs.altinn.studio/nb/app/app-dev-course/modul5/#oppgaver) i modul 5 var det uklart hvordan man skulle løse.

Man får beskjed om at "Det skal kun være mulig for brukeren som eier instansen å sende inn skjemaet, selv om andre måtte inneha de nødendige rollene". I tillegg er det lagt ved en lenke til [Egendefinert validering](https://docs.altinn.studio/nb/app/development/logic/validation/#hvordan-legge-til-egendefinert-validering). Der er det ett eksempel på bruk av `ValidateTask`, men det har ingenting med validering av bruker å gjøre.

I løsningsforslaget er `ValidateTask`-metoden utvidet med en ekstra parameter `ClaimsPrincipal user`, som brukes til å sjekke at brukeren inne på skjema har samme PartyId som instansen. For å få tilgang til denne informasjonen må man oppdatere `logic/App.cs` slik at `RunTaskValidation` sender med denne informasjonen (`HttpContext.User`) til `ValidateTask`. Er i alle fall sånn det gjøres i løsningsforslaget.

Dette klarte i alle fall ikke jeg å finne ut av uten å se på hvordan løsningsforslaget hadde implementert det. Vet ikke hvor vanlig det er å gjøre dette i praksis eller om det finnes en enklere måte å gjøre det på. Men uansett burde modul 5 / dokumentasjonen rundt validering av bruker dokumenteres tydligere slik at man lettere kan finne ut av hvordan dette kan løses.

`logic/App.cs`:
```c#
public override async Task RunTaskValidation(Instance instance, string taskId, ModelStateDictionary validationResults)
{
await _validationHandler.ValidateTask(instance, taskId, validationResults, _httpContext.User);
}
```

`logic/Validation/ValidationHandler.cs`:
```c#
public async Task ValidateTask(Instance instance, string taskId, ModelStateDictionary validationResults, ClaimsPrincipal user)
{
if (taskId == "Task_2")
{
Claim partyIdClaim = user.FindFirst(c => c.Type == AltinnCoreClaimTypes.PartyID);
if (partyIdClaim.Value != instance.InstanceOwner.PartyId)
{
validationResults.AddModelError(taskId, "confirm.validation_message");
}
}
await Task.CompletedTask;
}
```

Contributor guide

Open the contributing guide

Research direction

Start with the Modul 5 “Validering av innsender” task and its linked custom-validation page. Read the example code in logic/App.cs and logic/Validation/ValidationHandler.cs to compare the task instructions with the solution. Done means the course documentation clearly explains how user identity is passed to validation and checked against the instance owner.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
documentation
Issue type
Documentation
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.