Een scope in deze context is een label, bijvoorbeeld zds.scopes.zaken.lezen
waar een bepaalde betekenis aan toegekend is. We gebruiken scopes om
toegangsniveaus uit te drukken.
Toegangscontrole in de APIs speelt op verschillende niveaus, waarbij met gegevens binnen de relevante data rekening moet gehouden worden.
In de meest eenvoudige vorm kan een scope bepalen of je al dan niet toegang
hebt tot een operatie binnen een resource. Een alleen-lezen
scope zou je
bijvoorbeeld toegang kunnen geven op zaak_read
en zaak_list
, maar toegang
verbieden op zaak_create
, zaak_update
en zaak_partial_update
.
Zodra je scopes gaat onderkennen die meer businesslogica bevatten, zoals scopes koppelen aan de rol van een betrokkene, dan kan het zijn dat binnen collecties een andere (sub)set van records teruggegeven wordt doordat de scope dit inperkt. Een concreet voorbeeld hiervan kunnen zaakobjecten zijn die wel of niet privacygevoel zijn. Panden zouden bijvoorbeeld altijd teruggegeven kunnen worden (voor elke scope), maar gerelateerde natuurlijke personen zouden weggelaten kunnen worden voor een ‘publieke’ scope.
Tot slot onderkennen we nog een niveau waarop gegevens ingehouden kunnen worden. Indien je een record mag lezen, dan kan het zijn dat je niet alle attributen binnen de record mag lezen. Bijvoorbeeld een klantcontactcentrummedewerker zou de voornaam + naam van de zaakinitiator mogen lezen, maar niet het BSN van deze persoon.
De uitdaging bestaat erin om een set van scopes te definieren die beheersbaar is, maar toch toelaat om om te gaan met:
Inzichten van Arjan:
De mogelijkheden voor een gebruiker om gegevens van een object - zoals ‘Zaak 1234’ of ‘Document Abcd’ - te mogen raadplegen en/of bewerken hangen m.i. af van (minimaal) vier factoren:
De categorie van het object. Bijvoorbeeld het zaaktype van een zaak, of een zaak al dan niet beeindigd is, etc. Zo zal een gebruiker veelal slechts zaken van bepaalde zaaktypen mogen raadplegen, of alleen onderhanden zaken.
De betrokkenheid van de gebruiker bij het object. Voor sommige objecten kan hiervan sprake zijn, bijvoorbeeld zaken (betrokkenen in rollen), veelal is hiervan voor andere objecten geen sprake (zoals zaaktype). Zo zijn de mogelijheden voor een gebruiker zijnde een ‘Behandelaar van een Zaak’ anders dan een ‘Initiator van een zaak’ en geheel anders dan een gebruiker die geen Rol heeft als Betrokkene bij de zaak.
De categorie van het gegeven (van het object). De gebruiker wil iets met een gegeven (of relatie) van het object (of met een groep gegevens). Met het ene gegeven zal hij/zij meer mogen dan met een ander gegeven. Het maakt bijvoorbeeld nogal uit of het om persoonsgegevens gaat of om archiveringsgegevens.
De mate van vertrouwelijkheid van het gegeven (van het object). Ook al zou een gebruiker op grond van de voorgaande factoren het gegeven mogen raadplegen, dan nog kan het zijn dat hij/zij dat vanwege een bepaalde mate van vertrouwelijkheid toch niet mag.
[uitwerken op de dwarsdoorsnedes van deze factoren, te beginnen met rollen versus vertrouwelijkheidniveau’s]
Context-check: gebruiker heeft rol adviseur op de zaak in kwestie
GET /api/v1/rollen/?zaak=<url>&betrokkene=<url>&rolomschrijving=Adviseur
Resources:
toelichting
bewerkentitel
, beschrijving
)Challenges:
Scopes nodig voor deze rol:
zds.scopes.zaken.lezen
Context-check: gebruiker heeft rol adviseur op de zaak in kwestie
GET /api/v1/rollen/?zaak=<url>&betrokkene=<url>&rolomschrijving=Behandelaar
Mogelijks subtypes:
Resources:
Challenges:
Scopes nodig voor deze rol:
zds.scopes.zaken.lezen
Mogelijks subtypes:
Resources:
Resources:
Resources:
Scopes nodig voor deze rol:
zds.scopes.zaken.aanmaken
zds.scopes.zaken.lezen
(?)klantcontacter
zaakcoordinator
mede-initiator
Dit is heel erg WIP - we zoeken een goede balans!
Een ✓
betekent dat het in de referentieimplementatie gebouwd is.
Label
zds.scopes.zaken.lezen.openbaar
Omvat
Superset van zds.scopes.zaken.lezen.openbaar
Label
zds.scopes.zaken.lezen
Omvat
Label
zds.scopes.zaken.aanmaken
Omvat
zaak_create
status_create
(indien nog geen status gezet is)rol_create
zaakobject_create
Label
zds.scopes.zaken.bijwerken
Omvat
zaak_update
(alle attributen die niet alleen-lezen zijn)zaak_partial_update
(alle attributen die niet alleen-lezen zijn)Label
zds.scopes.zaakinformatieobjecten.aanmaken