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) encursor. Een antwoord heeftitemsen, als er meer is,next_cursor. Een lijst toont alleen wat de persoon mag zien, dus een pagina kan minder rijen hebben danlimitterwijlnext_cursortoch verder gaat. - Versies. Een ding dat je in zijn geheel vervangt (een groep, een eigen rol, een eigenschap,
het regeldocument) draagt
versionen de kopETag. Een wijziging noemt die versie inIf-Match; is het ding intussen veranderd, dan antwoordt OS409. - 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 |