Saltar al contenido

Referencia de control de acceso

Capgo utiliza control de acceso basado en roles (RBAC) para gestionar los permisos de cada miembro del equipo. Los roles se organizan por alcance — desde toda la organización hasta un solo bundle.

Para un recorrido visual sobre cómo gestionar miembros en el dashboard, consulta Organización.


Cada rol pertenece a un ámbito que determina a qué recurso otorga acceso.

AlcanceSe aplica aEjemplo de uso
OrganizaciónToda la organización y todas sus appsTu cofundador recibe Super Admin; tu contable recibe Billing Manager
appUna sola app y sus canalesUn contratista en una app tiene App Developer
CanalUn solo canal dentro de una appUn QA engineer solo gestiona el staging canal
BundleUna sola versión de bundleUn reviewer necesita acceso de lectura a un release

Un miembro puede tener un rol por cada scope — por ejemplo, un rol de org, un rol en la App A y otro en la App B.


Estos roles se asignan al invitar a un miembro. Otorgan acceso a toda la organización.

RolNombre internoDescripción
Superadministradororg_super_adminEquivalente a Owner. Control total, incluyendo borrar la org, gestionar el billing y transferir apps. Se asigna automáticamente al creador.
Administradororg_adminAdministración total: gestiona miembros, apps y channels. No puede borrar la org, actualizar el billing, transferir apps o promover usuarios a Super Admin.
Gestor de facturaciónorg_billing_adminAcceso solo a billing: ver y actualizar info de billing, facturas y logs de auditoría. Sin acceso a apps o miembros.
Miembroorg_memberAcceso de solo lectura a la org y todas sus apps.
PermisoDescripciónSuperadministradorAdministradorGestor de facturaciónMiembro
org.readVer la organización✅✅✅✅
org.update_settingsEditar nombre, logo y email de gestión de la org✅✅❌❌
org.deleteEliminar permanentemente la organización✅❌❌❌
org.read_membersVer la lista de miembros✅✅❌✅
org.invite_userInvitar nuevos miembros✅✅❌❌
org.update_user_rolesCambiar roles de miembros (un Admin no puede promover a Super Admin — bloqueado por la jerarquía de roles)✅✅❌❌
org.read_billingVer información de facturación y plan actual✅✅✅❌
org.update_billingActualizar método de pago y plan✅❌✅❌
org.read_invoicesVer facturas✅✅✅❌
org.read_auditVer el log de actividad de la organización✅✅❌❌
org.read_billing_auditVer el registro de auditoría de facturación✅✅✅❌

Limitado a una sola app. Úsalos cuando un miembro del equipo deba trabajar solo en una app y no en toda la organización.

RolNombre internoDescripción
Admin de appapp_adminControl total de una app: canales, dispositivos y roles de usuario. No puede eliminar ni transferir la app (operaciones a nivel de organización).
Desarrollador de appapp_developerSube bundles, gestiona dispositivos, lanza Native Build y actualiza la configuración de canales. Sin eliminar nada, sin cambiar ajustes de la app ni crear canales.
Uploader de appapp_uploaderAcceso de lectura + subida de nuevas versiones de bundles.
Lector de appapp_readerSolo lectura: estadísticas, bundles, canales, logs y dispositivos.
Preview de appapp_previewCiclo de vida de CI de preview vinculado a la organización y la app: sube un bundle y crea un canal de preview. Al crear ese canal, se otorgan automáticamente derechos de ciclo de vida solo para él.
PermisoDescripciónAdmin de appDesarrollador de appUploader de appLector de app
app.readVer detalles, stats y metadatos de la app✅✅✅✅
app.update_settingsEditar configuración de la app✅❌❌❌
app.read_bundlesVer la lista de bundles subidos✅✅✅✅
app.upload_bundleSubir una nueva versión del bundle✅✅✅❌
app.create_channelCrear un nuevo channel✅❌❌❌
app.read_channelsVer channels✅✅✅✅
app.read_logsVer logs de entrega de updates✅✅✅✅
app.manage_devicesAsignar, sobrescribir o desvincular dispositivos✅✅❌❌
app.read_devicesVer la lista de dispositivos✅✅✅✅
app.build_nativeEjecutar un native cloud build✅✅❌❌
app.read_auditVer el log de actividad de la app✅✅✅✅
app.update_user_rolesGestionar roles a nivel de app✅❌❌❌
bundle.deleteEliminar un bundle✅❌❌❌

Usa Preview de app (app_preview) para una clave CI vinculada a la organización y la app que gestiona el ciclo de vida de un PR preview sin acceso amplio a la app u organización.

El app_preview este vínculo solo otorga estos permisos a nivel de app:

PermisoPermite
app.readLeer la app seleccionada
app.read_bundlesLeer bundles subidos
app.upload_bundleSubir un bundle
app.create_channelCrear un canal

Cuando una key de App Preview crea un canal, Capgo le asigna automáticamente a esa key un binding channel_preview hijo solo para el nuevo canal:

PermisoPermite
channel.readLeer el canal creado por la key
channel.promote_bundleEstablecer el bundle subido de la propia key en ese canal
channel.deleteEliminar ese canal

Porque app_preview mantiene app.read, la clave puede enumerar los metadatos de canales en la app seleccionada. El binding automático de hijos es un límite de gestión: no otorga mutaciones del ciclo de vida para un canal que la clave no haya creado.

Capgo registra la clave de preview que creó cada canal y subió cada bundle. Por tanto, una clave de App Preview puede crear cada canal de preview no público que necesite, promover su propio bundle y eliminar atómicamente ese canal y ese bundle con channel delete --delete-bundle; no puede hacer esas cosas con un canal default/main existente, con el canal de otra clave de preview ni con el bundle de otra clave.

It does not include app.update_settingsla gestión de dispositivos o roles, channel.update_settings, channel.rollback_bundlela gestión de dispositivos forzados ni bundle.delete.


Limitados a un solo canal. Útiles para dar acceso dirigido a un canal de release específico.

RolNombre internoDescripción
Admin de canalchannel_adminControl total de un canal: ajustes, promover/revertir bundles y gestionar dispositivos forzados.
Lector de canalchannel_readerSolo lectura: bundle actual, historial, dispositivos forzados y logs de auditoría.
Preview de canalchannel_previewAsignado automáticamente a la clave de App Preview que creó el canal: puede leer, promover su propio bundle y eliminar dicho canal.
PermisoDescripciónAdmin de canalLector de canalPreview de canal
channel.readVer el canal y su bundle actual✅✅✅
channel.update_settingsEditar ajustes del canal (plataformas, política de updates...)✅❌❌
channel.deleteEliminar el canal✅❌✅
channel.read_historyVer historial de asignación de bundles✅✅❌
channel.promote_bundleEstablecer el bundle activo en el canal✅❌✅
channel.rollback_bundleHacer rollback a un bundle anterior✅❌❌
channel.manage_forced_devicesForzar dispositivos específicos a este canal✅❌❌
channel.read_forced_devicesVer la lista de dispositivos forzados✅✅❌
channel.read_auditVer el log de actividad del canal✅✅❌

Limitados a una versión de bundle. Se usan poco; la mayoría de los equipos prefieren roles a nivel de app.

RolNombre internoDescripción
Administrador de Bundlesbundle_adminLeer, actualizar metadatos y eliminar un bundle específico.
Visor de bundlesbundle_readerAcceso de solo lectura a un bundle específico.

En el dashboard, el acceso a los canales se determina por el rol de la app del usuario por defecto. Para un control más granular, puedes sobrescribir permisos de canal específicos por usuario o grupo sin cambiar su rol en la app.

Las sobrescrituras se configuran desde la pestaña Acceso pestaña haciendo clic en el botón de permisos del canal (icono de escudo) junto a un usuario. Ver Organización — Sobrescribir permisos de canal para un recorrido visual.

PermisoDescripciónComportamiento por defecto
Consulta laVer el canal y su bundle actualHeredado del rol de la app
HistorialVer el historial de asignación de bundlesHeredado del rol de la app
Asociar bundleEstablece o cambia el bundle activo en el canalHeredado del rol de la app

Cada permiso puede configurarse como:

  • Predeterminado — heredar del rol de la app (por defecto)
  • Permitir — otorgar explícitamente, sin importar el rol de la app
  • Denegar — bloquear explícitamente, sin importar el rol de la app

Esto te permite, por ejemplo, dar a un App Reader la capacidad de asociar bundles en el staging canal sin necesidad de ascenderlo a App Developer.


Los roles forman una jerarquía. Un rol padre hereda todos los permisos de sus hijos. Esto significa que un org_admin puede hacer todo lo que un app_admin puede, que a su vez puede hacer todo lo que un channel_admin puede, y así sucesivamente.

Super Admin (org_super_admin)
└── Admin (org_admin)
└── App Admin (app_admin)
├── App Developer (app_developer)
│ └── App Uploader (app_uploader)
│ └── App Reader (app_reader)
├── Bundle Admin (bundle_admin)
│ └── Bundle Viewer (bundle_reader)
└── Channel Admin (channel_admin)
└── Channel Viewer (channel_reader)

Cómo funciona en la práctica:

  • Una Administrador a nivel de organización puede hacer todo lo que un Admin de app puede, en todas las apps de la org.
  • Una Admin de app en una app específica puede hacer todo lo que un Admin de canal puede, en todos los canales de esa app.
  • Una Desarrollador de app puede hacer todo lo que un Uploader de app puede, y más.

La jerarquía solo fluye hacia abajo — un channel_admin usuario nunca obtiene permisos a nivel de org, aunque tenga un rol a nivel de app.


En lugar de asignar roles a cada usuario individualmente, puedes crear grupos y asignar roles al grupo. Cada miembro del grupo hereda esos roles automáticamente.

Cómo funcionan los grupos

Sección titulada “How groups work”
  • Un grupo pertenece a una sola organización — no puede abarcar varias orgs.
  • Los grupos pueden tener asignaciones de rol en cualquier scope: org, app, channel o bundle. Por ejemplo, a un grupo se le puede asignar el Desarrollador de app rol en la App A y el Admin de canal rol en el staging channel de la App B.
  • Al evaluar los permisos de un usuario, todas sus membresías de grupo se resuelven de forma transparente. Si alguno de sus grupos otorga el permiso requerido, se permite el acceso.
  • Un usuario puede pertenecer a múltiples grupos, y los permisos de todos los grupos se suman.
  • Los permisos basados en grupos solo se aplican a principales de usuario — las llaves API no heredan roles de grupo.
EscenarioSin gruposCon grupos
5 ingenieros de QA necesitan acceso de Developer a 3 apps15 vinculaciones de roles individuales1 grupo + 3 role bindings
Alguien se une al equipo de QAAñadir 3 role bindings manualmenteAñadirlos al grupo
Alguien deja el equipo de QAEliminar 3 role bindings manualmenteEliminarlos del grupo

Todos los endpoints de grupos requieren autenticación y se sirven bajo /private/groups.

Ventana de terminal
curl -X GET "https://api.capgo.app/private/groups/<ORG_ID>" \
-H "authorization: <API_KEY>"

Requiere org.read_members permiso.

Ventana de terminal
curl -X POST "https://api.capgo.app/private/groups/<ORG_ID>" \
-H "authorization: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"name": "QA Team",
"description": "Quality assurance engineers"
}'

Requiere org.update_user_roles permiso (Superadministrador o Administrador).

Ventana de terminal
curl -X PUT "https://api.capgo.app/private/groups/<GROUP_ID>" \
-H "authorization: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"name": "QA Team",
"description": "Updated description"
}'
Ventana de terminal
curl -X DELETE "https://api.capgo.app/private/groups/<GROUP_ID>" \
-H "authorization: <API_KEY>"

Al eliminar un grupo también se eliminan todas sus asignaciones de roles. Los miembros no se eliminan de la organización.

Ventana de terminal
curl -X GET "https://api.capgo.app/private/groups/<GROUP_ID>/members" \
-H "authorization: <API_KEY>"
Ventana de terminal
curl -X POST "https://api.capgo.app/private/groups/<GROUP_ID>/members" \
-H "authorization: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{ "user_id": "<USER_UUID>" }'

El usuario ya debe ser miembro de la organización. Si el miembro ya existe, la acción no tendrá efecto.

Ventana de terminal
curl -X DELETE "https://api.capgo.app/private/groups/<GROUP_ID>/members/<USER_UUID>" \
-H "authorization: <API_KEY>"

Ventana de terminal
curl -X GET "https://api.capgo.app/organization/members" \
-H "authorization: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{ "orgId": "<ORG_ID>" }'

Respuesta:

[
{
"uid": "user-uuid",
"email": "alice@example.com",
"image_url": "https://...",
"role": "org_admin",
"is_tmp": false
}
]
Ventana de terminal
curl -X POST "https://api.capgo.app/organization/members" \
-H "authorization: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"orgId": "<ORG_ID>",
"email": "bob@example.com",
"invite_type": "org_admin"
}'

Valores aceptados para invite_type:

ValorRol asignado
org_super_adminSuperadministrador
org_adminAdministrador
org_billing_adminGestor de facturación
org_memberMiembro
Ventana de terminal
curl -X DELETE "https://api.capgo.app/organization/members" \
-H "authorization: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"orgId": "<ORG_ID>",
"email": "bob@example.com"
}'

Ventana de terminal
npx @capgo/cli organization list --apikey <API_KEY>
Ventana de terminal
npx @capgo/cli organization members <ORG_ID> --apikey <API_KEY>

Los roles integrados cubren la mayoría de las estructuras de equipo. La creación de roles personalizados está en nuestro roadmap; si tu equipo lo necesita, contáctanos. Tu caso de uso nos ayudará directamente a priorizar esta funcionalidad.

Sigue con la referencia de control de acceso

Sección titulada “Keep going from Access Control Reference”

Si estás usando Referencia de control de acceso para planificar las operaciones del dashboard y de API, conéctalo con Resumen de API para los detalles de implementación en API Overview, Introducción para los detalles de implementación en la Introducción, Claves de API para el detalle de implementación en API Keys, Dispositivos para el detalle de implementación en Devices, y Bundles para el detalle de implementación en Bundles.