Aller au contenu

Référence du contrôle d'accès

Capgo utilise un contrôle d'accès basé sur les rôles (RBAC) pour gérer les permissions de chaque membre de l'équipe. Les rôles sont organisés par périmètre — de l'organisation entière jusqu'à un seul bundle.

Pour un aperçu visuel de la gestion des membres dans le dashboard, consultez Organisation.


Chaque rôl’appartient à une portée qui détermine les ressources auxquelles il donne accès.

PortéeS'applique àExemple d'utilisation
OrganisationL'organisation entière et toutes ses appsVotre cofondateur est Super Admin ; votre comptable est Billing Manager
cibleUne seule application et ses canauxUn prestataire travaillant sur une application reçoit le rôl’App Developer
CanalUn seul canal au sein d'une applicationUn ingénieur QA gère uniquement le staging canal
BundleUne seule version de bundleUn relecteur a besoin d'un accès en lecture pour une release spécifique

Un membre peut détenir un rôle par périmètre cible — par exemple, un rôle d'organisation, un rôle sur l'App A, et un rôle différent sur l'App B.


Ces rôles sont attribués lors de l'invitation d'un membre. Ils accordent des accès à l'ensemble de l'organisation.

RôleNom interneDescription
Super adminorg_super_adminÉquivalent propriétaire. Contrôle total incluant la suppression de l'organisation, la gestion de la facturation et le transfert d'apps. Attribué automatiquement au créateur de l'organisation.
Adminorg_adminAdministration complète — gérer les membres, les apps et les canaux. Ne peut pas supprimer l'organisation, modifier la facturation, transférer des apps ou promouvoir des utilisateurs en Super Admin.
Gestionnaire de facturationorg_billing_adminAccès facturation uniquement : consulter et modifier les infos de facturation, les factures et les logs d'audit de facturation. Aucun accès aux apps ou aux membres.
Membreorg_memberAccès en lecture seule à l'organisation et à toutes ses apps.
AutorisationDescriptionSuper adminAdminGestionnaire de facturationMembre
org.readVoir l'organisation✅✅✅✅
org.update_settingsEdit org name, logo, management email✅✅❌❌
org.deleteSupprimer définitivement l'organisation✅❌❌❌
org.read_membersVoir la liste des membres✅✅❌✅
org.invite_userInviter de nouveaux membres✅✅❌❌
org.update_user_rolesModifier les rôles des membres (un Admin ne peut pas promouvoir un Super Admin — restreint par la hiérarchie)✅✅❌❌
org.read_billingVoir les infos de facturation et le plan actuel✅✅✅❌
org.update_billingMettre à jour le mode de paiement et le plan✅❌✅❌
org.read_invoicesVoir les factures✅✅✅❌
org.read_auditVoir le log d'activité de l'organisation✅✅❌❌
org.read_billing_auditVoir le log d'audit de facturation✅✅✅❌

Limité à une seule app. Utilisez ces rôles lorsqu'un membre de l'équipe ne doit travailler que sur une app, et non sur toute l'organisation.

RôleNom interneDescription
Admin d'appapp_adminContrôle total d'une application — canaux, appareils, rôles utilisateur de l'app. Impossible de supprimer ou de transférer l'app (opérations au niveau de l'organisation).
Développeur d'appapp_developerEnvoyer des bundles, gérer les appareils, lancer des builds natifs, modifier les paramètres des canaux. Pas de suppression, pas de changement des paramètres de l'app, pas de création de canal.
Uploader d'appapp_uploaderAccès en lecture + envoi de nouvelles versions de bundles.
Lecteur d'appapp_readerLecture seule — stats, bundles, canaux, logs, appareils.
Aperçu de l'appapp_previewCycle de vie CI lié à l'organisation et à l'app : envoyez un bundle et créez un canal de preview. La création de ce canal accorde automatiquement les droits de cycle de vie uniquement pour celui-ci.
AutorisationDescriptionAdmin d'appDéveloppeur d'appUploader d'appLecteur d'app
app.readVoir les détails, les stats et les métadonnées de l'app✅✅✅✅
app.update_settingsModifier les paramètres de l'app✅❌❌❌
app.read_bundlesVoir la liste des bundles uploadés✅✅✅✅
app.upload_bundleUploader une nouvelle version du bundle✅✅✅❌
app.create_channelCréer un nouveau canal✅❌❌❌
app.read_channelsVoir les canaux✅✅✅✅
app.read_logsVoir les logs de livraison des mises à jour✅✅✅✅
app.manage_devicesAssigner, écraser ou dissocier des appareils✅✅❌❌
app.read_devicesVoir la liste des appareils✅✅✅✅
app.build_nativeDéclencher un build cloud natif✅✅❌❌
app.read_auditConsulter les logs d'activité de l'app✅✅✅✅
app.update_user_rolesGérer les assignations de rôles par app✅❌❌❌
bundle.deleteSupprimer un bundle✅❌❌❌

Utiliser Aperçu de l'app (app_preview) pour une clé CI liée à l'organisation et à l'app qui gère le cycle de vie des previews de PR sans accès étendu à l'app ni à l'organisation.

Le app_preview L'association n'accorde que ces permissions au niveau de l'application :

AutorisationPermet de
app.readLire l'app sélectionnée
app.read_bundlesLire les bundles uploadés
app.upload_bundleEnvoyer un bundle
app.create_channelCréer un canal

Lorsqu'une clé App Preview crée un canal, Capgo attribue automatiquement un binding enfant à cette clé channel_preview uniquement pour le nouveau canal :

AutorisationPermet de
channel.readLire le canal créé par la clé
channel.promote_bundleDéfinir le bundle uploadé de la clé sur ce canal
channel.deleteSupprimer ce canal

Parce que app_preview conserve app.read, la clé peut énumérer les métadonnées du canal dans l'application sélectionnée. La liaison enfant automatique est une limite de limite : elle ne permet pas de modifier le cycle de vie d'un canal que la clé n'a pas créé.

Capgo enregistre la clé de preview qui a créé chaque canal et envoyé chaque bundle. Par conséquent, une clé App Preview peut créer chaque canal de preview non public nécessaire, promouvoir son propre bundle, et supprimer de manière atomique ce canal et ce bundle avec channel delete --delete-bundle; il ne peut pas effectuer ces actions sur un canal par défaut/principal existant, sur le canal d'une autre clé de preview, ou sur le bundle d'une autre clé.

Elle n'inclut pas la app.update_settingsgestion des appareils ou des rôles, channel.update_settings, channel.rollback_bundlela gestion des appareils forcés, ou la bundle.delete.


Limité à un seul canal. Utile pour donner un accès ciblé à un canal de release spécifique.

RôleNom interneDescription
Admin du canalchannel_adminContrôle total d'un canal : paramètres, promotion/rollback de bundles, gestion des appareils forcés.
Lecteur du canalchannel_readerLecture seule — bundle actuel, historique, appareils forcés, logs d'audit.
Aperçu du canalchannel_previewAssigné automatiquement à la clé App Preview ayant créé le canal : lecture, promotion de son propre bundle et suppression de ce canal.
AutorisationDescriptionAdmin du canalLecteur de canalAperçu du canal
channel.readVoir le canal et son bundle actuel✅✅✅
channel.update_settingsEdit channel settings (platform toggles, update policy…)✅❌❌
channel.deleteSupprimer le canal✅❌✅
channel.read_historyVoir l'historique d'assignation des bundles✅✅❌
channel.promote_bundleDéfinir le bundle actif sur le canal✅❌✅
channel.rollback_bundleEffectuer un rollback vers un bundle précédent✅❌❌
channel.manage_forced_devicesForcer des appareils spécifiques sur ce canal✅❌❌
channel.read_forced_devicesVoir la liste des appareils forcés✅✅❌
channel.read_auditVoir les logs d'activité du canal✅✅❌

Limité à une seule version de bundle. Rarement nécessaire — la plupart des équipes utilisent des rôles au niveau de l'app.

RôleNom interneDescription
Admin des bundlesbundle_adminLire, mettre à jour les métadonnées et supprimer un bundle spécifique.
Visualiseur de bundlebundle_readerAccès en lecture seule à un bundle spécifique.

Dans le dashboard, l'accès aux canaux est déterminé par défaut par le rôle de l'utilisateur dans l'app. Pour un contrôle plus granulaire, vous pouvez écraser les permissions de canaux spécifiques par utilisateur ou par groupe sans modifier son rôle dans l'app.

Les surcharges se configurent depuis l'onglet Accès onglet en cliquant sur le bouton des permissions du canal (icône bouclier) à côté d'un utilisateur. Voir Organisation — Surcharge des permissions de canal pour un guide visuel.

AutorisationDescriptionComportement par défaut
LectureVoir le canal et son bundle actuelHérité du rôle de l'application
HistoriqueVoir l’historique des assignations de bundlesHérité du rôle de l'application
Associer un bundleDéfinir ou changer le bundle actif du canalHérité du rôle de l'app

Chaque permission peut être définie sur :

  • Par défaut — hériter du rôle de l'app (par défaut)
  • Autoriser — accorder explicitement, quel que soit le rôle de l'app
  • Refuser — bloquer explicitement, quel que soit le rôle de l'app

Cela vous permet, par exemple, de donner à un App Reader la possibilité d'associer des bundles sur le staging canal sans le promouvoir au rôle d'App Developer.


Les rôles forment une hiérarchie. Un rôle parent hérite de toutes les permissions de ses rôles enfants. Cela signifie qu'un org_admin peut tout faire ce qu'un app_admin peut, qui lui-même peut tout faire ce qu'un channel_admin peut, et ainsi de suite.

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)

Fonctionnement pratique :

  • Un Admin au niveau de l'organisation peut tout faire ce qu'un Admin d'app peut, sur chaque app de l'organisation.
  • Un Admin d'app sur une app spécifique peut tout faire comme un Admin de canal peut, sur chaque canal de cette app.
  • Un Développeur d'app peut tout faire comme un Uploader d'app peut, et plus encore.

La hiérarchie ne s'applique que vers le bas — un channel_admin ne gagne jamais de permissions au niveau de l'organisation, même s'il possède un rôl’au niveau de l'app.


Au lieu d'assigner des rôles à chaque utilisateur individuellement, vous pouvez créer des groupes et assigner des rôles au groupe. Chaque membre du groupe hérite automatiquement de ces rôles.

  • Un groupe appartient à une seule organisation — elle ne peut pas s'étendre sur plusieurs organisations.
  • Les groupes peuvent contenir des liaisons de rôles à any scope: organisation, app, canal ou bundle. Par exemple, un groupe peut se voir attribuer le Développeur d'app rôle sur l'App A et le rôle Administrateur de canal sur le staging canal de l'App B.
  • Lors de l'évaluation des permissions d'un utilisateur, tous ses groupements sont résolus de manière transparente. Si l'un de ses groupes accorde la permission requise, l'accès est autorisé.
  • Un utilisateur peut appartenir à plusieurs groupes, et les permissions de tous les groupes s'additionnent.
  • Group-based permissions only apply to principaux utilisateurs — les clés API n'héritent pas des rôles de groupe.
ScénarioSans groupesAvec des groupes
5 ingénieurs QA ont besoin d'un accès Developer sur 3 apps15 liaisons de rôles individuelles1 groupe + 3 liaisons de rôles
Un membre rejoint l'équipe QAAjouter 3 liaisons de rôles manuellementLes ajouter au groupe
Un membre quitte l'équipe QASupprimer 3 liaisons de rôles manuellementLes retirer du groupe

Tous les endpoints de groupe nécessitent une authentification et sont servis sous /private/groups.

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

Nécessite une org.read_members permission.

Fenêtre 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"
}'

Nécessite une org.update_user_roles permission (Super admin ou Admin).

Fenêtre 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"
}'
Fenêtre de terminal
curl -X DELETE "https://api.capgo.app/private/groups/<GROUP_ID>" \
-H "authorization: <API_KEY>"

La suppression d'un groupe supprime également tous ses liens de rôles. Les membres ne sont pas supprimés de l'organisation.

Fenêtre de terminal
curl -X GET "https://api.capgo.app/private/groups/<GROUP_ID>/members" \
-H "authorization: <API_KEY>"
Fenêtre 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>" }'

L'utilisateur doit déjà être membre de l'organisation. L'ajout d'un membre existant n'aura aucun effet.

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

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

Réponse :

[
{
"uid": "user-uuid",
"email": "alice@example.com",
"image_url": "https://...",
"role": "org_admin",
"is_tmp": false
}
]
Fenêtre 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"
}'

Valeurs acceptées pour invite_type:

ValeurRôl’assigné
org_super_adminSuper admin
org_adminAdmin
org_billing_adminGestionnaire de facturation
org_memberMembre
Fenêtre 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"
}'

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

Les rôles intégrés couvrent la plupart des structures d'équipe. La création de rôles personnalisés est sur notre roadmap — si votre équipe en a besoin, contactez-nous. Votre cas d'usage nous aidera directement à prioriser cette fonctionnalité.

Si vous utilisez Référence du contrôle d'accès pour planifier les opérations du dashboard et de API, connectez-l’avec Aperçu de API pour les détails d'implémentation dans « Vue d'ensemble de API », Introduction pour les détails d'implémentation dans l'introduction, Clés API pour les détails d'implémentation dans API Keys, Appareils pour les détails d'implémentation dans Devices, et Les bundles pour les détails d'implémentation dans Bundles.