Altinn / Altinn/altinn-platform-validation-tests
Avklar scope og test livsløpet til en tilgangsliste
- 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