Zum Inhalt springen

Access-Control-Referenz

Capgo nutzt rollenbasierte Zugriffskontrolle (RBAC) um die Berechtigungen der Teammitglieder zu verwalten. Rollen sind nach dem Scope — von der gesamten Organisation bis hin zu einem einzelnen Bundle – organisiert.

Für eine visuelle Anleitung zur Mitgliederverwaltung im Dashboard siehe Organisation.


Jede Rolle gehört zu einem Scope, der festlegt, auf welche Ressourcen der Zugriff gewährt wird.

UmfangGilt fürBeispiel-Anwendungsfall
OrganisationDie gesamte Organisation und alle zugehörigen AppsDein Co-Founder erhält Super Admin; dein Buchhalter erhält Billing Manager
App hinzuEine einzelne App und ihre ChannelsEin Freelancer an einer App erhält die Rolle App Developer
ChannelEin einzelner Channel innerhalb einer AppEin QA-Engineer verwaltet nur den staging Channel
BundleEine einzelne Bundle-VersionEin Reviewer benötigt Lesezugriff auf ein bestimmtes Release

Ein Mitglied kann pro Scope-Ziel eine Rolle innehaben — z. B. eine Org-Rolle, eine Rolle für App A und eine andere für App B.


Diese Rollen werden beim Einladen eines Members zugewiesen. Sie gewähren Zugriff auf die gesamte Organisation.

RolleInterner NameBeschreibung
Super Adminorg_super_adminEntspricht dem Owner. Volle Kontrolle, inklusive Löschen der Org, Verwalten der Abrechnung und Übertragen von Apps. Wird dem Org-Ersteller automatisch zugewiesen.
Adminorg_adminVollständige Administration — Mitglieder, Apps und Channels verwalten. Kann die Organisation nicht löschen, Abrechnungen nicht ändern, Apps nicht übertragen oder Nutzer zu Super Admins befördern.
Billing Managerorg_billing_adminReiner Billing-Zugriff: Abrechnungsinfos, Rechnungen und Billing Audit Logs einsehen und aktualisieren. Kein Zugriff auf Apps oder Mitglieder.
Mitgliedorg_memberSchreibgeschützter Zugriff auf die Orga und alle zugehörigen Apps.
BerechtigungBeschreibungSuper-AdminAdminBilling ManagerMitglied
org.readOrganisation anzeigen✅✅✅✅
org.update_settingsOrga-Name, Logo und Management-E-Mail bearbeiten✅✅❌❌
org.deleteOrganisation dauerhaft löschen✅❌❌❌
org.read_membersMitgliederliste anzeigen✅✅❌✅
org.invite_userNeue Mitglieder einladen✅✅❌❌
org.update_user_rolesMitgliederrollen ändern (Admins können keine Super Admins ernennen — durch Rollenhierarchie gesperrt)✅✅❌❌
org.read_billingAbrechnungsdaten und aktuellen Plan einsehen✅✅✅❌
org.update_billingZahlungsmethode und Plan aktualisieren✅❌✅❌
org.read_invoicesRechnungen anzeigen✅✅✅❌
org.read_auditAktivitätsprotokoll der Organisation einsehen✅✅❌❌
org.read_billing_auditAbrechnungsrelevantes Audit-Log anzeigen✅✅✅❌

Beschränkt auf eine einzelne App. Nutze diese, wenn ein Teammitglied nur an einer App und nicht an der gesamten Organisation arbeiten soll.

RolleInterner NameBeschreibung
App-Adminapp_adminVolle Kontrolle über eine App – Channels, Geräte und Benutzerrollen für die App. Die App kann nicht gelöscht oder übertragen werden (dies sind Org-Level-Operationen).
App-Entwicklerapp_developerBundles hochladen, Geräte verwalten, Native Builds triggern, Channel-Einstellungen aktualisieren. Keine Löschungen, keine Änderungen an App-Einstellungen, keine Channel-Erstellung.
App-Uploaderapp_uploaderLesezugriff + neue Bundle-Versionen hochladen.
App-Readerapp_readerNur Lesezugriff – Stats, Bundles, Channels, Logs, Geräte.
App-Vorschauapp_previewOrg- und App-gebundener Preview CI Lifecycle: Ein Bundle hochladen und einen Preview-Channel erstellen. Das Erstellen des Channels gewährt automatisch Lifecycle-Rechte nur für diesen.
BerechtigungBeschreibungApp-AdminApp-EntwicklerApp-UploaderApp-Reader
app.readApp-Details, Stats und Metadaten einsehen✅✅✅✅
app.update_settingsApp-Einstellungen bearbeiten✅❌❌❌
app.read_bundlesListe der hochgeladenen Bundles anzeigen✅✅✅✅
app.upload_bundleNeue Bundle-Version hochladen✅✅✅❌
app.create_channelNeuen Channel erstellen✅❌❌❌
app.read_channelsChannels anzeigen✅✅✅✅
app.read_logsUpdate-Delivery-Logs anzeigen✅✅✅✅
app.manage_devicesGeräte zuweisen, überschreiben oder entkoppeln✅✅❌❌
app.read_devicesGeräteliste anzeigen✅✅✅✅
app.build_nativeNative Cloud Build auslösen✅✅❌❌
app.read_auditAktivitätsprotokoll auf App-Ebene anzeigen✅✅✅✅
app.update_user_rolesApp-spezifische Rollenzuweisungen verwalten✅❌❌❌
bundle.deleteBundle löschen✅❌❌❌

Nutzt App-Vorschau (app_preview) für einen organisations- und app-gebundenen CI-Key, der den PR-Preview-Lifecycle verwaltet, ohne weitreichenden Zugriff auf die App oder die gesamte Organisation zu haben.

Der app_preview Diese Bindung gewährt nur diese Berechtigungen auf App-Ebene:

BerechtigungErlaubt
app.readDie ausgewählte App lesen
app.read_bundlesHochgeladene Bundles lesen
app.upload_bundleEin Bundle hochladen
app.create_channelEinen Channel erstellen

Wenn ein App Preview Key einen Channel erstellt, weist Capgo diesem Key automatisch ein Child- channel_preview Binding nur für den neuen Channel zu:

BerechtigungErlaubt
channel.readDen vom Key erstellten Channel lesen
channel.promote_bundleDas eigene hochgeladene Bundle des Keys auf diesem Channel setzen
channel.deleteDiesen Channel löschen

Da app_preview behält app.read, kann die Channel-Metadaten in der ausgewählten App auflisten. Das automatische Child-Binding ist eine Management- Grenze: Es gewährt keine Lifecycle-Mutationen für Channels, die der Key nicht selbst erstellt hat.

Capgo speichert den Preview-Key, der den jeweiligen Channel erstellt und das Bundle hochgeladen hat. Daher kann ein App Preview Key alle benötigten nicht-öffentlichen Preview-Channels erstellen, sein eigenes Bundle promoten und diesen Channel sowie das Bundle atomar mit channel delete --delete-bundlelöschen; dies ist nicht für bestehende Default-/Main-Channels, Channels anderer Preview-Keys oder Bundles anderer Keys möglich.

Es umfasst kein app.update_settings, Device- oder Rollen-Management, channel.update_settings, channel.rollback_bundle, Forced-Device-Management oder generisches bundle.delete.


Beschränkt auf einen einzelnen Channel. Ideal, um gezielten Zugriff auf einen bestimmten Release-Channel zu gewähren.

RolleInterner NameBeschreibung
Channel-Adminchannel_adminVolle Kontrolle über einen Channel: Einstellungen, Bundles promoten/zurückrollen, Forced Devices verwalten.
Channel-Betrachterchannel_readerRead-only — aktuelles Bundle, Historie, Forced Devices, Audit-Log.
Channel-Vorschauchannel_previewVom System dem App Preview Key zugewiesen, der den Channel erstellt hat: Lesen, eigenes Bundle promoten und den Channel löschen.
BerechtigungBeschreibungChannel-AdminChannel-BetrachterChannel-Vorschau
channel.readChannel und das aktuelle Bundle anzeigen✅✅✅
channel.update_settingsKanaleinstellungen bearbeiten (Plattform-Toggles, Update-Policy…)✅❌❌
channel.deleteKanal löschen✅❌✅
channel.read_historyBundle-Zuweisungshistorie anzeigen✅✅❌
channel.promote_bundleAktives Bundle im Kanal festlegen✅❌✅
channel.rollback_bundleAuf ein vorheriges Bundle zurückrollen✅❌❌
channel.manage_forced_devicesBestimmte Geräte auf diesen Kanal erzwingen✅❌❌
channel.read_forced_devicesListe der erzwungenen Geräte anzeigen✅✅❌
channel.read_auditKanal-Aktivitätsprotokoll anzeigen✅✅❌

Beschränkt auf eine einzelne Bundle-Version. Selten benötigt – die meisten Teams nutzen stattdessen Rollen auf App-Ebene.

RolleInterner NameBeschreibung
Bundle-Adminbundle_adminEin bestimmtes Bundle lesen, Metadaten aktualisieren und löschen.
Bundle-Viewerbundle_readerSchreibgeschützter Zugriff auf ein bestimmtes Bundle.

Im Dashboard wird der Channel-Zugriff standardmäßig durch die App-Rolle des Nutzers bestimmt. Für eine feinere Kontrolle kannst du spezifische Channel-Berechtigungen überschreiben, pro Nutzer oder Gruppe, ohne deren App-Rolle zu ändern.

Overrides werden im Tab der App Auskunft konfiguriert, indem du auf den Button für Channel-Berechtigungen (Schild-Icon) neben einem Nutzer klickst. Siehe Organisation — Channel-Berechtigungen überschreiben für eine visuelle Anleitung.

BerechtigungBeschreibungStandardverhalten
LiesChannel und das aktuelle Bundle anzeigenVon der App-Rolle geerbt
VerlaufVerlauf der Bundle-Zuweisungen anzeigenVon der App-Rolle geerbt
Bundle zuordnenDas aktive Bundle auf dem Channel festlegen oder ändernVon der App-Rolle geerbt

Jede Berechtigung kann so eingestellt werden:

  • Standard — Vererbung aus der App-Rolle (Standard)
  • Zulassen — Explizite Erteilung, unabhängig von der App-Rolle
  • Verweigern — Explizites Blockieren, unabhängig von der App-Rolle

So können Sie beispielsweise einem App Reader die Berechtigung geben, Bundles mit der staging Channel zu verknüpfen, ohne ihn zum App Developer zu machen.


Rollen bilden eine Hierarchie. Eine übergeordnete Rolle erbt alle Berechtigungen ihrer untergeordneten Rollen. Das bedeutet, dass ein org_admin kann alles, was ein app_admin alles tun kann, was wiederum ein channel_admin tun kann, und so weiter.

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)

So funktioniert es in der Praxis:

  • Ein Admin auf Org-Ebene alles tun kann, was ein App-Admin kann, für jede App in der Orga.
  • Ein App-Admin für eine bestimmte App alles, was ein Channel-Admin kann, für jeden Channel in dieser App.
  • Ein App-Entwickler kann alles, was ein App-Uploader kann, plus weitere Funktionen.

Die Hierarchie verläuft nur abwärts — ein channel_admin erhält niemals Berechtigungen auf Org-Ebene, selbst wenn er eine Rolle auf App-Ebene besitzt.


Anstatt Rollen jedem Nutzer einzeln zuzuweisen, kannst du Groups erstellen und Rollen der Gruppe zuweisen. Jedes Mitglied der Gruppe erbt diese Rollen automatisch.

  • Eine Gruppe gehört zu eine Organisation — sie kann nicht mehrere Orgs umfassen.
  • Gruppen können Rollenbindungen auf jeder Ebene: Org, App, Channel oder Bundle. Beispielsweise kann einer Gruppe die App-Entwickler Rolle für App A und die Channel-Admin Rolle für den staging Channel von App B.
  • Bei der Prüfung der Berechtigungen eines Benutzers werden alle Gruppenmitgliedschaften transparent aufgelöst. Wenn eine seiner Gruppen die erforderliche Berechtigung gewährt, wird der Zugriff freigegeben.
  • Ein Benutzer kann zu mehrere Gruppen, und die Berechtigungen aller Gruppen sind additiv.
  • Gruppenbasierte Berechtigungen gelten nur für User-Principals — API Keys erben keine Gruppenrollen.
SzenarioOhne GruppenMit Gruppen
5 QA-Engineers benötigen Developer-Zugriff auf 3 Apps15 einzelne Role-Bindings1 Gruppe + 3 Rollen-Bindings
Jemand tritt dem QA-Team bei3 Rollen-Bindings manuell hinzufügenSie der Gruppe hinzufügen
Jemand verlässt das QA-Team3 Rollen-Bindings manuell entfernenSie aus der Gruppe entfernen

Alle Gruppen-Endpoints erfordern Authentifizierung und werden unter bereitgestellt /private/groups.

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

Erfordert org.read_members Berechtigung.

Terminalfenster
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"
}'

Erfordert org.update_user_roles Berechtigung (Super-Admin oder Admin).

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

Beim Löschen einer Gruppe werden auch alle zugehörigen Role Bindings entfernt. Mitglieder werden nicht aus der Organisation gelöscht.

Gruppenmitglieder auflisten

Section titled “List group members”
Terminalfenster
curl -X GET "https://api.capgo.app/private/groups/<GROUP_ID>/members" \
-H "authorization: <API_KEY>"

Mitglied zu einer Gruppe hinzufügen

Abschnitt „Mitglied zu einer Gruppe hinzufügen“
Terminalfenster
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>" }'

Der Nutzer muss bereits Mitglied der Organisation sein. Das Hinzufügen eines bereits vorhandenen Mitglieds hat keine Auswirkung.

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

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

Antwort:

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

Zulässige Werte für invite_type:

WertZugewiesene Rolle
org_super_adminSuper-Admin
org_adminAdmin
org_billing_adminBilling Manager
org_memberMitglied
Terminalfenster
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"
}'

Terminalfenster
npx @capgo/cli organization list --apikey <API_KEY>
Terminalfenster
npx @capgo/cli organization members <ORG_ID> --apikey <API_KEY>

Die Standardrollen decken die meisten Teamstrukturen ab. Die Erstellung benutzerdefinierter Rollen ist auf unserer Roadmap – falls dein Team dies benötigt, kontaktiere uns. Dein Anwendungsfall hilft uns direkt dabei, dieses Feature zu priorisieren.

Wenn du es nutzt Access-Control-Referenz um Dashboard- und API-Operationen zu planen, verbinde es mit API Übersicht für Details zur Implementierung im API Overview, Einführung für die Implementierungsdetails in der Einleitung, API Schlüssel für die Implementierungsdetails in API Keys, Geräte für die Implementierungsdetails in Devices und Bundles für die Implementierungsdetails in Bundles.