L'API d'accès¶
Cette page s'adresse à qui construit une application propre sur OS et veut savoir ce que la personne
connectée peut faire, afin que l'application n'affiche que des boutons et des menus qui fonctionnent.
Elle montre comment faire une requête à OS, comment lire par type d'élément ce que quelqu'un peut
faire, et ce que signifie allowed_actions sur chaque élément. Ce que sont les rôles et les règles
figure dans Rôles et accès.
Une requête à OS¶
- Adresse. Chaque route concernant une organisation se trouve sous
/api/v1/organisations/{id}, avec l'identifiant de l'organisation (org_...). - Connexion. Chaque requête porte le jeton d'accès de la personne connectée :
Authorization: Bearer <token>. OS décide pour cette personne, dans cette organisation. - Les listes viennent par pages :
limit(200 au maximum, 50 par défaut) etcursor. Une réponse aitemset, s'il y en a davantage,next_cursor. Une liste ne montre que ce que la personne a le droit de voir ; une page peut donc avoir moins de lignes quelimitalors quenext_cursorcontinue. - Versions. Un élément que vous remplacez dans son ensemble (un groupe, un rôle propre, un
attribut, le document de règles) porte
versionet l'en-têteETag. Une modification indique cette version dansIf-Match; si l'élément a changé entre-temps, OS répond409. - Les erreurs sont du
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": "..."}
Un 422 a en plus errors, une liste avec, par champ, field, message et type.
| Réponse | Signification |
|---|---|
401 |
Pas de jeton, ou un jeton non valide. |
403 |
La personne voit l'élément mais n'a pas le droit de faire cette action, une attribution va plus loin que ce qu'elle a ou que le service de l'organisation, ou l'organisation (ou une organisation au-dessus) est suspendue. |
404 |
L'élément n'existe pas, ou la personne n'a pas le droit de le voir. OS ne fait pas la différence. |
409 |
Une version périmée, un nom en double, une limite atteinte, ou le dernier administrateur disparaîtrait. |
422 |
La requête est incorrecte : un nom inconnu, une règle que le langage n'autorise pas, ou un champ incorrect. |
Ce que quelqu'un peut faire, par type¶
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 nomme chaque type d'OS et core_kinds chaque type des fonctions d'IA, toujours tous et dans
l'ordre de AccessKind et CoreAccessKind (ci-dessous). Pour chaque
type figurent les actions que la personne peut faire sur au moins un élément de ce type. Utilisez
cela pour afficher un menu ou un bouton « nouveau » avant d'avoir lu un seul élément.
La réponse ne dit jamais « non » là où quelque chose est permis. Elle peut dire « oui » alors que
chaque élément que la personne rencontre est tout de même refusé, par exemple si une règle ne vaut que
pour les éléments portant une étiquette que rien ne porte. Décidez par élément avec allowed_actions.
Pour les fonctions d'IA, c'est ce que les règles de la personne permettent. Une requête y peut encore être refusée pour une autre raison ; affichez alors ce refus.
Ce que quelqu'un peut faire, par élément¶
Chaque élément qu'OS renvoie porte allowed_actions : les actions que la personne peut faire sur
précisément cet élément. N'affichez un bouton que si l'action y figure ; la requête derrière le bouton
réussit alors.
| Élément | Ce que dit allowed_actions |
|---|---|
| organisation | see ; write pour ses paramètres et pour créer une organisation en dessous |
| adhésion, invitation, groupe, rôle, attribut, document de règles, ligne du journal d'audit | les actions sur cet élément lui-même |
| attribution de rôle | les actions sur son rôle : use signifie que la personne peut retirer l'attribution |
| valeur d'attribut | les actions sur le membre ou le groupe qui l'a : write signifie que la personne peut la retirer |
Une organisation a une seconde liste, parent_allowed_actions : ce que la personne peut faire à son
sujet dans l'organisation au-dessus. write y signifie suspendre, rétablir et remplacer les
étiquettes ; delete signifie supprimer. Pour l'organisation du sommet, et pour qui n'atteint pas
l'organisation au-dessus, cette liste est vide.
Le service d'une organisation a les deux mêmes listes : dans
parent_allowed_actions, write signifie que la personne peut y donner et retirer des offres et des
exceptions et fixer la date de fin d'une démo.
Par type et par élément, tout vaut dans le service de l'organisation : ce qui n'en fait pas partie ne figure dans aucune des deux listes.
Les noms dans le schéma¶
Les types et les actions sont des énumérations du schéma OpenAPI d'OS, avec des noms fixes, pour que vous puissiez en faire vos propres types :
| Schéma | Valeurs |
|---|---|
AccessKind |
les types d'OS : organisation, membership, invitation, group, role, rule, attribute, audit_event, placement, domain, sign_in, service, service_plan |
CoreAccessKind |
les types des fonctions d'IA, voir Types et actions |
AccessAction |
see, use, write, delete |