La API de acceso¶
Esta página es para quien construye una aplicación propia sobre OS y quiere saber qué puede hacer la
persona que ha iniciado sesión, para que la aplicación muestre solo botones y menús que funcionen.
Muestra cómo haces una solicitud a OS, cómo lees por tipo de cosa lo que alguien puede hacer, y qué
significa allowed_actions en cada cosa. Qué son los roles y las reglas está en
Roles y acceso.
Una solicitud a OS¶
- Dirección. Toda ruta sobre una organización está bajo
/api/v1/organisations/{id}, con el id de la organización (org_...). - Inicio de sesión. Toda solicitud lleva el token de acceso de la persona que ha iniciado sesión:
Authorization: Bearer <token>. OS decide para esa persona, en esa organización. - Las listas llegan por páginas:
limit(como máximo 200, por defecto 50) ycursor. Una respuesta tieneitemsy, si hay más,next_cursor. Una lista muestra solo lo que la persona puede ver, así que una página puede tener menos filas quelimitmientrasnext_cursoraún continúa. - Versiones. Una cosa que sustituyes entera (un grupo, un rol propio, un atributo, el documento
de reglas) lleva
versiony la cabeceraETag. Un cambio indica esa versión enIf-Match; si la cosa ha cambiado entretanto, OS responde409. - Los errores son
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 tiene además errors, una lista con field, message y type por campo.
| Respuesta | Significado |
|---|---|
401 |
Ningún token, o un token no válido. |
403 |
La persona ve la cosa pero no puede hacer esta acción, una concesión va más allá de lo que tiene o del servicio de la organización, o la organización (o una superior) está suspendida. |
404 |
La cosa no existe, o la persona no puede verla. OS no distingue. |
409 |
Una versión obsoleta, un nombre duplicado, un límite alcanzado, o desaparecería el último administrador. |
422 |
La solicitud no es correcta: un nombre desconocido, una regla que el lenguaje no permite, o un campo incorrecto. |
Lo que alguien puede hacer, por tipo¶
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 nombra cada tipo de OS y core_kinds cada tipo de las funciones de IA, siempre todos y en el
orden de AccessKind y CoreAccessKind (más abajo). En cada tipo figuran
las acciones que la persona puede hacer sobre al menos una cosa de ese tipo. Úsalo para mostrar
un menú o un botón «nuevo» antes de haber leído una sola cosa.
La respuesta nunca dice «no» donde algo sí se puede. Puede decir «sí» mientras se rechaza toda cosa
que la persona encuentra, por ejemplo si una regla solo vale para cosas con una etiqueta que ninguna
lleva. Decide por cosa con allowed_actions.
En las funciones de IA, esto es lo que permiten las reglas de la persona. Una solicitud allí aún puede rechazarse por otro motivo; muestra entonces ese rechazo.
Lo que alguien puede hacer, por cosa¶
Toda cosa que devuelve OS lleva allowed_actions: las acciones que la persona puede hacer sobre
exactamente esa cosa. Muestra un botón solo si la acción está en la lista; la solicitud detrás del
botón tiene entonces éxito.
| Cosa | Qué dice allowed_actions |
|---|---|
| organización | see; write para sus ajustes y para crear una organización debajo |
| membresía, invitación, grupo, rol, atributo, documento de reglas, fila del registro de auditoría | las acciones sobre esa misma cosa |
| concesión de rol | las acciones sobre su rol: use significa que la persona puede quitar la concesión |
| valor de atributo | las acciones sobre el miembro o el grupo que lo tiene: write significa que la persona puede quitarlo |
Una organización tiene además una segunda lista, parent_allowed_actions: lo que la persona puede
hacer sobre ella en la organización superior. write allí es suspender, reanudar y sustituir las
etiquetas; delete es eliminar. Para la organización más alta, y para quien no llega a la
organización superior, esa lista está vacía.
El servicio de una organización tiene las mismas dos listas: en
parent_allowed_actions, write significa que la persona puede dar y quitar allí planes y
excepciones y fijar la fecha de fin de una demo.
Por tipo y por cosa, todo vale dentro del servicio de la organización: lo que no está en él, no está en ninguna de las dos listas.
Los nombres en el esquema¶
Los tipos y las acciones son enumeraciones en el esquema OpenAPI de OS, con nombres fijos, para que puedas crear tus propios tipos a partir de ellos:
| Esquema | Valores |
|---|---|
AccessKind |
los tipos de OS: organisation, membership, invitation, group, role, rule, attribute, audit_event, placement, domain, sign_in, service, service_plan |
CoreAccessKind |
los tipos de las funciones de IA, consulta Tipos y acciones |
AccessAction |
see, use, write, delete |