Altinn / Altinn/altinn-studio-docs
Introkurs/Modul 5: "Validering av innsender" er uklar
- 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
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