role) que define o que ela pode fazer no dashboard. Essa página descreve as sete funções disponíveis, o que cada uma libera, como elas interagem com plataformas (sub-organizações) e como gerenciar tudo isso na tela de membros.
Funções valem para usuários logados em
dashboard.chargefy.io — autenticação por JWT. Integrações server-to-server usam API keys com escopo próprio (read / write / admin) e não passam por essa permissão. Para detalhes da autenticação programática, veja Autenticação e Chaves de API.As sete funções
| Função | Quem deveria ter | Resumo |
|---|---|---|
| Owner | Donos da conta | Acesso total, incluindo deletar a organização. Uma organização pode ter vários owners. |
| Administrator | Lideranças que gerenciam dia-a-dia | Acesso quase total. Pode tudo que o Owner pode, exceto deletar a organização. |
| IAM admin | Time de TI / acesso responsável por convidar e remover pessoas | Gerencia membros e suas funções. Não acessa dados de pagamento (customers, charges, subs, etc.). |
| Developer | Engenheiros que mantêm a integração | API keys, webhooks, dev tools (logs, events). Lê dados de negócio para debug, mas não executa ações de negócio (não faz refund, não edita customer). |
| Support specialist | Atendimento ao cliente | Customer, refund, dispute, subscription, e pode criar pagamentos (checkout sessions, payment links, payment intents) para um cliente. Sem dev/financeiro. |
| Analyst | Operação que reage a casos pontuais | Refund, dispute, customer edit, cancelar/pausar assinatura. Não cria pagamentos novos — reage a dados existentes. |
| View only | Stakeholders que só precisam ver dados (financeiro, analytics, auditoria) | Lê tudo. Não executa nenhuma ação de escrita. |
Uma organização pode ter vários owners. Quem cria a organização entra como o primeiro Owner. A partir daí, qualquer Owner pode promover outro membro a Owner ou convidar alguém diretamente como Owner — owners são peers no topo e podem gerenciar uns aos outros. A única trava é o último owner: não dá para remover nem rebaixar o último Owner ativo, para a organização nunca ficar sem ninguém com controle total.
owner/admin/member foram refeitos. Se você tinha membros com a função antiga admin, eles foram migrados para Administrator. A pessoa mais antiga (criadora) de cada organização foi promovida automaticamente para Owner. Membros antigos com support viraram Support specialist; read_only virou View only. Promova ou rebaixe quem precisar na tela de membros.Matriz de capabilities
Cada ação interna do dashboard é amarrada a uma capability (uma chave curta comorefund.create). A função do membro define quais capabilities ela tem.
| Capability | Owner | Admin | IAM | Dev | Support | Analyst | View |
|---|---|---|---|---|---|---|---|
org.delete — deletar a organização | ✅ | — | — | — | — | — | — |
org.manage — configurações da organização | ✅ | ✅ | — | — | — | — | — |
member.manage — convidar, remover, trocar função | ✅ | ✅ | ✅ | — | — | — | — |
api_key.manage — criar e revogar API keys | ✅ | ✅ | — | ✅ | — | — | — |
api_key.read_secret — visualizar o token cru | ✅ | ✅ | — | ✅ | — | — | — |
webhook.manage — endpoints de webhook | ✅ | ✅ | — | ✅ | — | — | — |
dev_tools.view — DevConsole, logs de eventos | ✅ | ✅ | — | ✅ | — | — | — |
payment_profile.manage — KYC, contas bancárias, splits | ✅ | ✅ | — | — | — | — | — |
bank_account.read — visualizar conta bancária | ✅ | ✅ | — | — | — | — | — |
product.write — criar/editar produtos e preços | ✅ | ✅ | — | — | — | — | — |
discount.write — criar/editar descontos e cupons | ✅ | ✅ | — | — | — | — | — |
payment.create — checkout sessions, payment intents, payment links | ✅ | ✅ | — | — | ✅ | — | — |
customer.write — criar/editar customers | ✅ | ✅ | — | — | ✅ | ✅ | — |
subscription.write — criar/atualizar/cancelar/pausar | ✅ | ✅ | — | — | ✅ | ✅ | — |
refund.create — emitir reembolsos | ✅ | ✅ | — | — | ✅ | ✅ | — |
dispute.respond — atualizar disputas e enviar evidência | ✅ | ✅ | — | — | ✅ | ✅ | — |
business.read — ler customers, charges, subs, invoices, refunds, disputes, payments | ✅ | ✅ | — | ✅ | ✅ | ✅ | ✅ |
IAM admin não tem
business.read. A tela do IAM admin esconde Customers, Subscriptions, Invoices, Payments, Refunds, Disputes — ele só vê Members e (no futuro) audit logs. Isso vale também na API: SELECT em qualquer tabela de dados de pagamento retorna vazio para IAM admin, mesmo em consulta direta.Recursos sensíveis ficam fora do View only, Support e Analyst. O token completo de uma chave de API só aparece para quem tem
api_key.read_secret (Owner, Administrator, Developer). O mesmo vale para os dados da conta bancária. A listagem de chaves (nome + última utilização) continua visível para quem tem api_key.manage.Gerenciar membros e funções
A tela vive em Settings → Membros dentro de qualquer organização. Os controles — convidar, trocar função, revogar acesso — aparecem só para quem temmember.manage (Owner, Administrator e IAM admin). Para os demais, ficam ocultos.
Hierarquia estrita
Termember.manage não dá poder sobre qualquer um. Vale uma regra de precedência estrita, na ordem owner > administrator > iam_admin > developer = support_specialist = analyst = view_only:
- Você só gerencia (troca função ou revoga) quem está estritamente abaixo de você. Um Administrator gerencia IAM admin e tudo abaixo — mas não outro Administrator, nem um Owner. Um IAM admin gerencia Developer, Support specialist, Analyst e View only.
- Owners são a exceção: são peers no topo. Um Owner pode gerenciar qualquer um, incluindo outros owners — promover, rebaixar ou revogar. E só um Owner pode conceder a função Owner (promovendo um membro ou convidando direto como Owner).
- Você só concede funções abaixo da sua (owners concedem qualquer uma). Por isso só um Owner cria ou promove alguém a Administrator. Um Administrator concede IAM admin e abaixo; um IAM admin, apenas Developer/Support/Analyst/View only.
- Último owner protegido. Não dá para rebaixar nem remover o último Owner ativo — promova outro a Owner antes.
- Você mesmo. Pode sair da organização quando quiser (a menos que seja o último Owner — promova outro antes), mas não altera a própria função.
| Sua função | Pode gerenciar | Pode conceder |
|---|---|---|
| Owner | todos, incluindo outros owners (menos o último owner) | qualquer função, incluindo Owner |
| Administrator | IAM admin e abaixo | IAM admin, Developer, Support specialist, Analyst, View only |
| IAM admin | Developer, Support specialist, Analyst, View only | Developer, Support specialist, Analyst, View only |
… some para membros que você não pode gerenciar — não fica um botão desabilitado nem um erro genérico. E não é só estética: o servidor aplica exatamente a mesma regra (veja abaixo).
Operações
- Convidar alguém. Clique em Convidar membro, informe o e-mail e escolha a função (só as que você pode conceder aparecem). View only é o padrão sugerido — princípio do menor privilégio.
- Trocar a função de quem já é membro. No menu
…ao lado da pessoa, escolha Mudar para …. A mudança vale imediatamente. - Remover um membro. Mesmo menu, Revogar acesso. A pessoa perde acesso na hora.
Herança em plataformas
Se sua organização é uma plataforma com sub-organizações conectadas (viaplatform_organizations), a função na organização-mãe é herdada nas organizações filhas conectadas e ativas.
| Você é, na organização-mãe… | …e na organização filha você se comporta como | Pode |
|---|---|---|
| Owner | Owner | Tudo, incluindo deletar a sub-organização |
| Administrator | Administrator | Quase tudo (não deleta) |
| IAM admin | IAM admin | Só membros |
| Developer | Developer | API keys/webhooks/logs + leitura |
| Support specialist | Support specialist | Operacional de cliente |
| Analyst | Analyst | Operacional sem criar pagamento |
| View only | View only | Só leitura |
owner > administrator > iam_admin > developer > support_specialist > analyst > view_only.
Não existe role específica de “platform admin” — quem é Administrator/Owner na organização-mãe age como tal nas filhas. Para acesso restrito de equipe a uma filha específica, convide a pessoa diretamente para a filha com a função apropriada.
Como a negação acontece
Quando um membro tenta executar uma ação que sua função não permite, dois mecanismos atuam:- No dashboard (UX otimista) — botões e ações cujo nível ela não tem ficam desabilitados com tooltip explicando o motivo (ex.: “Requires admin role”), ou são ocultados quando não fazem sentido (ex.: aba Customers para IAM admin) ou quando a hierarquia não permite (ações sobre alguém de função igual ou superior à sua). É só uma dica visual — a verdade está no servidor.
- No backend (autoridade) — toda rota de mutação verifica a capability na API antes de executar. Negação retorna HTTP 403 com
error.type = "authentication_error"e mensagem contendo a capability requerida (ex.:Access denied — required capability: refund.create).
- Tentar revogar/alterar alguém de função igual ou superior →
Você não pode alterar a função de Administrator — exige permissão superior à sua. - Tentar conceder uma função igual ou superior à sua →
Você não pode conceder a função Administrator — ela é igual ou superior à sua. - Tentar rebaixar/remover o último Owner →
Não é possível rebaixar o único Owner — promova outro membro a Owner primeiro.
- Edge Functions (rotas de escrita) chamam o helper
requireCapabilityIfJwt— aplica para JWT, ignora para API key (que tem o escopo próprio). - Postgres / RLS — a maioria das tabelas de dados de pagamento têm policies que também checam
user_has_capability(org_id, 'business.read'), fechando a porta caso alguma rota futura esqueça de gatear. É como o IAM admin acaba sem ver Customers/Charges/Subscriptions.
Diferença entre função e escopo de API key
| Função de membro | Escopo de API key | |
|---|---|---|
| Atua em | Sessão JWT do dashboard | Requisições server-to-server com Authorization: Bearer ch_... |
| Valores | owner, administrator, iam_admin, developer, support_specialist, analyst, view_only | read, write, admin |
| Inheritance entre orgs | Sim — função na mãe vale na filha | Não — escopo da key vale só onde a key opera |
| Criada via | Convite de membro | Painel Settings → Chaves de API |
write — são caminhos paralelos para o mesmo recurso.
Próximos passos
- Autenticação — JWT do dashboard vs API key da integração.
- Chaves de API — escopos, ambientes (
live/test) e rotação.

