Ga naar inhoud

De toegangs-API

Deze pagina is voor wie een eigen toepassing op OS bouwt en wil weten wat de aangemelde persoon mag, zodat de toepassing alleen knoppen en menu's toont die werken. Ze laat zien hoe je een verzoek aan OS doet, hoe je per soort ding leest wat iemand mag, en wat allowed_actions op elk ding betekent. Wat rollen en regels zijn, staat in Rollen en toegang.

Een verzoek aan OS

  • Adres. Elke route over een organisatie staat onder /api/v1/organisations/{id}, met het id van de organisatie (org_...).
  • Aanmelding. Elk verzoek draagt het toegangstoken van de aangemelde persoon: Authorization: Bearer <token>. OS beslist voor die persoon, in die organisatie.
  • Lijsten komen per pagina: limit (hoogstens 200, standaard 50) en cursor. Een antwoord heeft items en, als er meer is, next_cursor. Een lijst toont alleen wat de persoon mag zien, dus een pagina kan minder rijen hebben dan limit terwijl next_cursor toch verder gaat.
  • Versies. Een ding dat je in zijn geheel vervangt (een groep, een eigen rol, een eigenschap, het regeldocument) draagt version en de kop ETag. Een wijziging noemt die versie in If-Match; is het ding intussen veranderd, dan antwoordt OS 409.
  • Fouten zijn application/problem+json:
{"type": "about:blank", "title": "Forbidden", "status": 403,
 "detail": "You may grant only what you hold yourself; you do not hold the role org-admin.",
 "request_id": "..."}

Een 422 heeft daarnaast errors, een lijst met per veld field, message en type.

Antwoord Betekenis
401 Geen of geen geldig token.
403 De persoon ziet het ding maar mag deze actie niet, een toekenning gaat verder dan wat hij heeft of dan de dienst van de organisatie, of de organisatie (of een erboven) is opgeschort.
404 Het ding bestaat niet, of de persoon mag het niet zien. OS maakt geen onderscheid.
409 Een verouderde versie, een dubbele naam, een grens bereikt, of de laatste beheerder zou verdwijnen.
422 Het verzoek klopt niet: een onbekende naam, een regel die de taal niet toestaat, of een veld dat niet klopt.

Wat iemand mag, per soort

curl -s "$OS/api/v1/organisations/$ORG/access" -H "Authorization: Bearer $TOKEN"
{"organisation_id": "org_...",
 "kinds": [
   {"kind": "organisation", "actions": ["see"]},
   {"kind": "membership", "actions": ["see", "write"]},
   {"kind": "group", "actions": ["see", "write"]},
   ...
 ],
 "core_kinds": [
   {"kind": "model", "actions": ["see", "use"]},
   {"kind": "thread", "actions": ["see", "write", "delete"]},
   ...
 ]}

kinds noemt elke soort van OS en core_kinds elke soort van de AI-functies, altijd allemaal en in de volgorde van AccessKind en CoreAccessKind (hieronder). Bij elke soort staan de acties die de persoon op minstens één ding van die soort mag. Gebruik dit om een menu of een knop "nieuw" te tonen voordat je één ding hebt gelezen.

Het antwoord zegt nooit "nee" waar iets wel mag. Het kan "ja" zeggen terwijl elk ding dat de persoon tegenkomt toch wordt geweigerd, bijvoorbeeld als een regel alleen geldt voor dingen met een label dat niets draagt. Beslis per ding met allowed_actions.

Bij de AI-functies is dit wat de regels van de persoon toestaan. Een verzoek daar kan nog om een andere reden worden geweigerd; toon dan die weigering.

Wat iemand mag, per ding

Elk ding dat OS teruggeeft draagt allowed_actions: de acties die de persoon op precies dat ding mag. Toon een knop alleen als de actie erin staat; het verzoek achter de knop slaagt dan.

Ding Wat allowed_actions zegt
organisatie see; write voor haar instellingen en een organisatie eronder maken
lidmaatschap, uitnodiging, groep, rol, eigenschap, regeldocument, logboekrij de acties op dat ding zelf
roltoekenning de acties op haar rol: use betekent dat de persoon de toekenning mag afnemen
eigenschapswaarde de acties op het lid of de groep die haar heeft: write betekent dat de persoon haar mag afnemen

Een organisatie heeft nog een tweede lijst, parent_allowed_actions: wat de persoon in de organisatie erboven over haar mag. write daar is opschorten, hervatten en de labels vervangen; delete is verwijderen. Voor de bovenste organisatie, en voor wie de organisatie erboven niet bereikt, is die lijst leeg.

De dienst van een organisatie heeft dezelfde twee lijsten: in parent_allowed_actions betekent write dat de persoon er pakketten en uitzonderingen mag geven en weghalen en de einddatum van een demo mag zetten.

Per soort en per ding geldt alles binnen de dienst van de organisatie: wat er niet in zit, staat in geen van beide lijsten.

De namen in het schema

De soorten en acties zijn opsommingen in het OpenAPI-schema van OS, met vaste namen, zodat je je eigen types ervan kunt maken:

Schema Waarden
AccessKind de soorten van OS: organisation, membership, invitation, group, role, rule, attribute, audit_event, placement, domain, sign_in, service, service_plan
CoreAccessKind de soorten van de AI-functies, zie Soorten en acties
AccessAction see, use, write, delete