Altinn / Altinn/altinn-platform-validation-tests

Avklar scope og test livsløpet til en tilgangsliste

Open
#482 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
2
Forks
1
Avg merge
1d 4h
Merged PRs (30d)
105

Description

Tilgangslister opprettes og oppdateres med `PUT /access-lists/{owner}/{identifier}`, leses med `GET /access-lists/{owner}/{identifier}`, listes per eier med `GET /access-lists/{owner}` (paginert, med `include` og `resourceIdentifier`), endres delvis med `PATCH` (json-patch) og slettes med `DELETE`. Ingen av dem er dekket i dag, og ingen test i repoet rører tilgangsliste-APIet i det hele tatt.

Clientene finnes for alle fem (`AccessListUpsert`, `AccessListGet`, `AccessListGetByOwner`, `AccessListPatch`, `AccessListDelete`), og byggeblokker finnes for alle bortsett fra `PATCH`, som må skrives. Filene `access-list-members.js` og `access-list-resource-connections.js` i client-mappa er tomme, men metodene deres ligger i `access-list.js`, så de er ikke i veien.

Det som må avklares først er tilgangen. Lesing krever ett av `altinn:resourceregistry/accesslist.read`, `accesslist.write`, `resource.admin` eller `pdp:accesslist.read`, skriving krever `accesslist.write` eller `resource.admin`, og i tillegg må tokenet eie organisasjonen som står i ruten. Ingen av tilgangsliste-scopene ligger i `K6/scopes.js`, så steg én er å finne ut om token-generatoren kan gi oss dem.

Testen bør opprette en liste, lese den tilbake, sjekke at den dukker opp i listingen for eieren, endre navn eller beskrivelse med `PATCH`, lese på nytt og sjekke at endringen slo gjennom, og slette til slutt. Endepunktene svarer med `ETag` og versjon, så testen bør også sjekke at versjonen endrer seg når listen gjør det.

Scope: dette er avklart, og vi trenger ikke noe nytt for å komme i gang. `AccessListsController` har `[Authorize(Policy = POLICY_ACCESS_LIST_READ)]` på klassen og `POLICY_ACCESS_LIST_WRITE` på skrivemetodene. Lesing godtar `resource.admin`, `accesslist.read`, `accesslist.write` eller `pdp:accesslist.read`, skriving godtar `resource.admin` eller `accesslist.write`, og begge har i tillegg `RequireUserOwnsResource()`.

Poenget er at `ResourceOwnerExcemptScopesHandler` lar `resource.admin` og `pdp:accesslist.read` oppfylle eierkravet uten videre. Med `altinn:resourceregistry/resource.admin`, som alt ligger i `K6/scopes.js`, er hele tilgangsliste-APIet altså åpent uansett hva som står i `{owner}`. Det er verifisert i `src/Altinn.ResourceRegistry/ResourceRegistryHost.cs` og `src/Altinn.ResourceRegistry/Auth/` på main.

Vil vi heller teste med minste nødvendige rettighet, må `accesslist.read` og `accesslist.write` legges i `K6/scopes.js`, og da må eierkravet oppfylles på ordentlig: `OwnedResourceAuthorizationHandler` sammenligner `{owner}` med `urn:altinn:org`-claimet, eller, hvis ruten inneholder et organisasjonsnummer, med `consumer`-claimet. `EnterpriseTokenBuilder.withOrganization` setter alt orgkoden, så et token med `ttd` treffer `{owner}` lik `ttd`.

Del av #473

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the AccessListUpsert, AccessListGet, AccessListGetByOwner, AccessListPatch and AccessListDelete clients, then inspect access-list.js and K6/scopes.js. Read AccessListsController and the authorization files to choose the token setup, using EnterpriseTokenBuilder.withOrganization if testing the owner requirement. Done means the test creates, reads, lists, patches and deletes a list, and verifies ETag or version changes after the update.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
api, testing-qa
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.