Vai al contenuto

Riferimento controllo accessi

Capgo utilizza controllo degli accessi basato sui ruoli (RBAC) per gestire le autorizzazioni di ogni membro del team. I ruoli sono organizzati per ambito — dall'intera organizzazione fino al singolo bundle.

Per una guida visiva sulla gestione dei membri nel dashboard, consulta Organizzazione.


Ogni ruolo appartiene a uno scope che determina a quali risorse garantisce l'accesso.

AmbitoSi applica aEsempio di utilizzo
OrganizzazioneL'intera org e tutte le sue appIl tuo co-founder riceve Super Admin; il tuo commercialista riceve Billing Manager
AppUna singola app e i suoi canaliUn contractor su un'app riceve il ruolo App Developer
CanaleUn singolo canale all'interno di un'appUn QA engineer gestisce solo il staging canale
BundleUna singola versione del bundleUn reviewer ha accesso in sola lettura a un rilascio specifico

Un membro può avere un ruolo per ogni ambito — ad esempio, un ruolo org, un ruolo sull'App A e un ruolo diverso sull'App B.


Questi ruoli vengono assegnati durante l'invito di un membro. Garantiscono l'accesso a tutta l'organizzazione.

RuoloNome internoDescrizione
Super Adminorg_super_adminEquivalente all'Owner. Controllo totale, inclusa l'eliminazione dell'org, la gestione del billing e il trasferimento delle app. Assegnato automaticamente al creatore dell'org.
Adminorg_adminAmministrazione completa — gestione di membri, app e channel. Non può eliminare l'org, aggiornare il billing, trasferire app o promuovere utenti a Super Admin.
Responsabile della fatturazioneorg_billing_adminAccesso solo fatturazione: visualizza e aggiorna informazioni di fatturazione, fatture e log di audit. Nessun accesso ad app o membri.
Membroorg_memberAccesso in sola lettura all'org e a tutte le sue app.
PermessoDescrizioneSuper AdminAdminResponsabile della fatturazioneMembro
org.readVisualizza l'organizzazione✅✅✅✅
org.update_settingsModifica nome org, logo, email di gestione✅✅❌❌
org.deleteElimina definitivamente l'organizzazione✅❌❌❌
org.read_membersVisualizza la lista dei membri✅✅❌✅
org.invite_userInvita nuovi membri✅✅❌❌
org.update_user_rolesCambia i ruoli dei membri (l'Admin non può promuovere a Super Admin — bloccato dalla gerarchia)✅✅❌❌
org.read_billingVisualizza info di fatturazione e piano attuale✅✅✅❌
org.update_billingAggiorna metodo di pagamento e piano✅❌✅❌
org.read_invoicesVisualizza le fatture✅✅✅❌
org.read_auditVisualizza il log di attività dell'organizzazione✅✅❌❌
org.read_billing_auditVisualizza il log di audit della fatturazione✅✅✅❌

Limitati a una singola app. Usali quando un membro del team deve lavorare su una sola app e non sull'intera organizzazione.

RuoloNome internoDescrizione
Admin Appapp_adminControllo totale di un'app: canali, dispositivi e ruoli utente dell'app. Non può eliminare o trasferire l'app (operazioni a livello di org).
Sviluppatore Appapp_developerUpload di bundle, gestione dispositivi, trigger di native build e aggiornamento impostazioni canali. Nessuna eliminazione, modifica impostazioni app o creazione canali.
App Uploaderapp_uploaderAccesso in lettura + upload di nuove versioni del bundle.
App Readerapp_readerSola lettura — statistiche, bundle, canali, log, dispositivi.
Anteprima Appapp_previewCiclo di vita CI per anteprime legate all'organizzazione e all'app: carica un bundle e crea un canale di anteprima. La creazione del canale concede automaticamente i diritti di lifecycle solo per quello.
PermessoDescrizioneAdmin AppSviluppatore AppApp UploaderApp Reader
app.readVisualizza dettagli, statistiche e metadati dell'app✅✅✅✅
app.update_settingsModifica le impostazioni dell'app✅❌❌❌
app.read_bundlesVisualizza l'elenco dei bundle caricati✅✅✅✅
app.upload_bundleCarica una nuova versione del bundle✅✅✅❌
app.create_channelCrea un nuovo canale✅❌❌❌
app.read_channelsVisualizza i canali✅✅✅✅
app.read_logsVisualizza i log di consegna degli aggiornamenti✅✅✅✅
app.manage_devicesAssegna, sovrascrivi o scollega i dispositivi✅✅❌❌
app.read_devicesVisualizza l'elenco dei dispositivi✅✅✅✅
app.build_nativeAvvia una native cloud build✅✅❌❌
app.read_auditVisualizza i log di attività dell'app✅✅✅✅
app.update_user_rolesGestisci l'assegnazione dei ruoli per singola app✅❌❌❌
bundle.deleteElimina un bundle✅❌❌❌

Usa Anteprima App (app_preview) per una chiave CI legata all'organizzazione e all'app che gestisce il ciclo di vita delle preview delle PR senza accessi estesi all'app o all'organizzazione.

Il app_preview il binding concede solo questi permessi a livello di app:

PermessoConsente
app.readLeggere l'app selezionata
app.read_bundlesLeggi i bundle caricati
app.upload_bundleCarica un bundle
app.create_channelCrea un canale

Quando una App Preview key crea un canale, Capgo assegna automaticamente a quella key un binding channel_preview figlio solo per il nuovo canale:

PermessoConsente di
channel.readLeggere il canale creato dalla key
channel.promote_bundleImpostare il bundle caricato dalla key su quel canale
channel.deleteEliminare quel canale

Perché app_preview mantiene app.read, la chiave può elencare i metadati del canale nell'app selezionata. Il binding automatico dei figli è un limite di gestione: non concede mutazioni del ciclo di vita per un canale che la chiave non ha creato.

Capgo registra la preview key che ha creato ogni canale e caricato ogni bundle. Pertanto, una App Preview key può creare ogni canale preview non pubblico necessario, promuovere il proprio bundle e cancellare atomicamente quel canale e bundle con channel delete --delete-bundle; non può eseguire queste operazioni su un canale default/main esistente, sul canale di un'altra preview key o sul bundle di un'altra chiave.

It does not include app.update_settingsla gestione di device o ruoli, channel.update_settings, channel.rollback_bundlela gestione dei device forzati o bundle.delete.


Limitati a un singolo canale. Utili per concedere accessi mirati a un canale di rilascio specifico.

RuoloNome internoDescrizione
Admin del canalechannel_adminControllo totale di un canale: impostazioni, promozione/rollback bundle e gestione dispositivi forzati.
Viewer del canalechannel_readerSola lettura — bundle attuale, cronologia, dispositivi forzati e audit log.
Preview del canalechannel_previewAssegnato al tasto App Preview che ha creato il canale: può leggere, promuovere il proprio bundle e cancellare il canale.
PermessoDescrizioneAdmin del canaleVisualizzatore canaleAnteprima canale
channel.readVisualizza il canale e il bundle attuale✅✅✅
channel.update_settingsModifica le impostazioni del canale (toggle piattaforma, policy di aggiornamento...)✅❌❌
channel.deleteElimina il canale✅❌✅
channel.read_historyVisualizza la cronologia delle assegnazioni dei bundle✅✅❌
channel.promote_bundleImposta il bundle attivo sul canale✅❌✅
channel.rollback_bundleEffettua il rollback a un bundle precedente✅❌❌
channel.manage_forced_devicesForza dispositivi specifici su questo canale✅❌❌
channel.read_forced_devicesVisualizza l'elenco dei dispositivi forzati✅✅❌
channel.read_auditVisualizza i log di attività del canale✅✅❌

Limitato a una singola versione del bundle. Raramente necessario — la maggior parte dei team usa ruoli a livello di app.

RuoloNome internoDescrizione
Amministratore Bundlebundle_adminLeggi, aggiorna i metadati e cancella un bundle specifico.
Visualizzatore bundlebundle_readerAccesso in sola lettura a un bundle specifico.

Nella dashboard, l'accesso ai canali è determinato per impostazione predefinita dal ruolo dell'utente nell'app. Per un controllo più granulare, puoi sovrascrivere i permessi di canali specifici per utente o gruppo senza cambiarne il ruolo nell'app.

Gli override si configurano dalla scheda Accesso dell'app cliccando sul pulsante permessi canale (icona scudo) accanto a un utente. Vedi Organizzazione — Override dei permessi dei canali per una guida visiva.

PermessoDescrizioneComportamento predefinito
LetturaVisualizza il canale e il bundle attualeEreditato dal ruolo dell'app
CronologiaView the bundle assignment historyEreditato dal ruolo dell'app
Associa bundleImposta o cambia il bundle attivo sul canaleEreditato dal ruolo dell'app

Ogni permesso può essere impostato su:

  • Predefinito — eredita dal ruolo dell'app (default)
  • Consenti — concedi esplicitamente, indipendentemente dal ruolo dell'app
  • Nega — blocca esplicitamente, indipendentemente dal ruolo dell'app

Questo ti permette, ad esempio, di dare a un App Reader la possibilità di associare bundle sul staging canale senza promuoverlo ad App Developer.


I ruoli formano una gerarchia. Un ruolo genitore eredita tutti i permessi dei suoi ruoli figli. Ciò significa che un org_admin può fare tutto ciò che fa un app_admin può, che a sua volta può fare tutto ciò che un channel_admin può fare, e così via.

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)

Come funziona in pratica:

  • Un Admin a livello di org può fare tutto ciò che può fare un Admin App può, su ogni app dell'org.
  • Un Admin App su un'app specifica può fare tutto ciò che un Amministratore del canale può, su ogni channel di quell'app.
  • Un Sviluppatore App può fare tutto ciò che fa un App Uploader può, e molto altro ancora.

La gerarchia fluisce solo verso il basso — un channel_admin non ottiene mai permessi a livello di organizzazione, anche se possiede un ruolo a livello di app.


Invece di assegnare i ruoli a ogni singolo utente, puoi creare dei gruppi e assegnare i ruoli al gruppo. Ogni membro del gruppo eredita automaticamente tali ruoli.

  • Un gruppo appartiene a una sola organizzazione — non può estendersi su più org.
  • I gruppi possono contenere role binding a qualsiasi scope: org, app, channel o bundle. Ad esempio, un gruppo può avere il Sviluppatore App role sull'App A e il Amministratore del canale role sul staging channel dell'App B.
  • Quando vengono valutati i permessi di un utente, tutte le sue appartenenze ai gruppi vengono risolte in modo trasparente. Se uno qualsiasi dei suoi gruppi concede il permesso richiesto, l'accesso è consentito.
  • Un utente può appartenere a gruppi multipli, e i permessi di tutti i gruppi si sommano.
  • I permessi basati su gruppo si applicano solo a principal utente — le chiavi API non ereditano i ruoli del gruppo.
ScenarioSenza gruppiCon i gruppi
5 ingegneri QA devono avere accesso Developer a 3 app15 binding di ruolo individuali1 gruppo + 3 role binding
Qualcuno entra nel team QAAggiungi 3 role binding manualmenteAggiungili al gruppo
Qualcuno lascia il team QARimuovi 3 role binding manualmenteRimuovili dal gruppo

Tutti gli endpoint dei gruppi richiedono autenticazione e sono serviti sotto /private/groups.

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

Richiede org.read_members permessi.

Finestra del terminale
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"
}'

Richiede org.update_user_roles permessi (Super Admin o Admin).

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

L'eliminazione di un gruppo rimuove anche tutti i relativi role binding. I membri non vengono eliminati dall'organizzazione.

Finestra del terminale
curl -X GET "https://api.capgo.app/private/groups/<GROUP_ID>/members" \
-H "authorization: <API_KEY>"
Finestra del terminale
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'utente deve già far parte dell'organizzazione. Aggiungere un membro già presente non produce alcun effetto.

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

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

Risposta:

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

Valori accettati per invite_type:

ValoreRuolo assegnato
org_super_adminSuper Admin
org_adminAdmin
org_billing_adminResponsabile della fatturazione
org_memberMembro
Finestra del terminale
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"
}'

Finestra del terminale
npx @capgo/cli organization list --apikey <API_KEY>
Finestra del terminale
npx @capgo/cli organization members <ORG_ID> --apikey <API_KEY>

I ruoli predefiniti coprono la maggior parte delle strutture di team. La creazione di ruoli personalizzati è nella nostra roadmap — se è una funzione di cui il tuo team ha bisogno, reach out to us. Il tuo caso d'uso ci aiuterà a dare priorità a questa feature.

Se stai usando Riferimento controllo accessi per pianificare le operazioni della dashboard e di API, collegalo a Panoramica API per i dettagli di implementazione in Panoramica di API, Introduzione per i dettagli di implementazione in Introduzione, Chiavi API per i dettagli di implementazione delle chiavi API, Dispositivi per i dettagli di implementazione in Devices, e Bundle per il dettaglio di implementazione in Bundles.