Permisos
Una solicitud autenticada pasa por tres verificaciones, en este orden.
Cualquiera que la niegue termina la solicitud con 403.
| # | Verificación | Qué comprueba | Rechazo |
|---|---|---|---|
| 1 | Alcance del token | el recurso y el nivel de acceso concedidos al token | 403 INSUFFICIENT_SCOPE |
| 2 | Rol de la persona | lo que la persona del token puede hacer en la organización | 403 USER_PERMISSION_DENIED o 403 NOT_A_MEMBER |
| 3 | Habilitación de la organización | si Kobana habilitó la pantalla equivalente de la consola para la organización | 403 FEATURE_NOT_ENABLED |
1. Alcances
El token necesita el alcance del recurso y el nivel de acceso que exige el método. La gramática, la tabla de recursos y los ejemplos están en Autenticación → Alcances.
2. Rol de la persona
Un token emitido para una persona (con el claim email) nunca alcanza más
que la persona: además de los alcances, vale su rol en la organización. Cada
ruta exige un permiso agent.<recurso>.<acción>:
| Acción | Cuándo |
|---|---|
list, read | listar y detallar |
create, update, delete | crear, modificar y eliminar |
executions.run | lanzar una tarea |
webhook_deliveries.replay | reenviar una entrega de webhook |
repository.sync | sincronizar el Playbook |
Los roles aceptan comodines: *, agent.* y agent.<recurso>.*.
| Respuesta | Cuándo |
|---|---|
403 USER_PERMISSION_DENIED | el rol no concede el permiso (details.required dice cuál) |
403 NOT_A_MEMBER | la persona del token no tiene vínculo con la organización |
Un token de integración, sin persona, vale solo por los alcances.
GET /v1/me no verifica el rol.
3. Habilitación de la organización
Las rutas que reflejan pantallas de la consola (lanzamiento, logs, webhooks,
entregas, entornos, secrets, programaciones, endpoint de la tarea, repositorio
y uso) respetan también las habilitaciones que Kobana da a la organización. Una
operación no habilitada responde 403 FEATURE_NOT_ENABLED, con
details.permission.
Plan contratado
Lanzar una tarea exige Kadu en el plan de la organización. Sin plan, el
lanzamiento responde 403 ENTITLEMENT_REQUIRED, con details.reason y
details.required_product. La lectura, el registro y la cancelación nunca se
bloquean por el plan. Ver Plan y costos.