Hierarquia de funções, permissões e como elas restringem os endpoints da API.
A Reten implementa Controle de Acesso Baseado em Funções (RBAC) hierárquico, com permissões granulares agrupadas por domínio. As tabelas abaixo listam todas as permissões, agrupadas pelos mesmos domínios que a API usa; um usuário com várias funções tem as permissões de todas elas.
As permissões e as funções são escritas como o valor que a API envia e recebe: activity:view, admin. Esse é o valor que você envia em permissions de POST /api/api-keys e em roles de POST /api/auth/register, e o que a API retorna em um 403 — Required permissions: activity:view.
Cada função tem sua própria lista explícita de permissões: uma função superior não tem automaticamente todas as permissões das funções inferiores (por exemplo, supervisor tem activity:force-retry-dispatch e fde não). A hierarquia rege o gerenciamento de usuários: um usuário só pode gerenciar usuários cuja função seja estritamente inferior à sua.
Ver AGCs e seus pilares de ciclo de vida (incl. os configHashes por pilar)
super_admin, admin
activity-generation-config:create
Criar uma AGC com seus 3 pilares de ciclo de vida
super_admin, admin
activity-generation-config:update
Atualizar metadados da AGC, substituir os pilares de ciclo de vida in-place, publicar e pausar
super_admin, admin
activity-generation-config:delete
Arquivar uma AGC (com efeito cascata sobre seus lifecycle configs)
super_admin, admin
lifecycle-config:view
Ver os lifecycle configs somente leitura (ativação / engagement / ressurreição)
super_admin, admin
lifecycle-config:delete
Interno — restringe o arquivamento/restauração de lifecycle na cascata da lixeira
super_admin, admin
Os lifecycle configs não têm permissões próprias de criação/edição/exclusão: um lifecycle config é criado e editado apenas por meio do fluxo da AGC, restringido por activity-generation-config:create / activity-generation-config:update.
Editar as definições de canal de um provedor de despacho: mapeamento de payload e configurações recomendados, e se o mapeamento é obrigatório (PATCH /api/dispatch-providers/:providerId/channel-definitions/:definitionId)
Ver os registros arquivados na lixeira e restaurá-los (/api/trash). Ver o detalhe ou a prévia da cascata de um registro e restaurá-lo também exigem a permissão que exclui esse tipo de registro (por exemplo, commerce:delete). Excluir um registro da lixeira definitivamente é restrito a super_admin
super_admin, admin, fde
trash:manage-settings
Ver e alterar as configurações de retenção da lixeira do tenant (GET e PATCH /api/trash/settings)
super_admin, admin
commerce:delete
Excluir comércios, que vão para a lixeira (DELETE /api/commerces/:id)
super_admin, admin, fde
operator:delete
Excluir operadores, que vão para a lixeira (DELETE /api/operators/:id)
super_admin, admin, fde
route:delete
Excluir rotas, que vão para a lixeira (DELETE /api/routes/:id)
super_admin, admin, fde
supervisor:delete
Excluir supervisores, que vão para a lixeira (DELETE /api/supervisors/:id)
O motor de retenção que calcula os estados de ciclo de vida dos comércios lê as AGCs de forma programática. Ele usa uma API key (sem novo mecanismo de auth) que carrega activity-generation-config:view. Com essa permissão, ele chama GET /api/activity-generation-configs e GET /api/activity-generation-configs/:id para ler cada pilar e seu configHashes (para detectar de forma barata quando uma config mudou), e então grava os estados calculados de volta via commerce lifecycle snapshots. Os dois endpoints de AGC são project-scoped: com uma chave de tenant, cada chamada envia x-project-id (sem ele a API responde 400 — Falta el header obligatorio x-project-id.), e uma chave de projeto só lê as AGCs do seu próprio projeto — veja Escopo da chave.
Auth JWT e chaves de tenant: forneça o header x-project-id com o UUID do projeto. Nos endpoints project-optional o header é opcional e restringe a requisição a esse projeto
Chaves de projeto: a chave sempre trabalha no seu próprio projeto, então o header não é necessário (veja Escopo da chave)