Usuários e permissões — /config/usuarios
Tela onde você convida o time, atribui roles e gerencia o acesso. Permissão necessária: usuarios:view.
Estrutura da tela
Header
- Título “Usuários e Permissões”
- Subtítulo “{N} usuário(s) na organização”
- Botão Convidar (UserPlus)
Lista de usuários (cards)
Cada usuário aparece como linha com:
- Avatar (com iniciais quando não tem foto)
- Nome + tag
(você)se for o usuário logado - Role atual (badge colorido — vermelho admin/super, azul analista, neutro outros)
- Botão “Ver permissões” (popover com detalhe da role)
- Botão Editar (lápis)
- Badge de orgs (Building2 — quando user pertence a múltiplas)
- Botão Inativar/Reativar (só visível para outros usuários, não pra si)
Convites pendentes (seção tracejada)
Aparece se há convites em aberto:
- E-mail convidado
- Role atribuída
- “Expira em DD/MM/AAAA”
- Botão Copiar link (token único)
- Botão Revogar (X)
Convidar usuário — passo a passo
Clique em “Convidar” no header.
Preencha os campos:
Campo Detalhe E-mail Endereço do convidado Role Dropdown — papel que ele terá na entrada Organização Dropdown (apenas se você tem acesso a múltiplas orgs) Ao selecionar a role, um popover mostra todas as permissões que ela contém — útil pra revisar antes de mandar.
Clique em “Criar convite”.
O ConectAI gera um link
/invites/accept?token=.... A tela mostra:- Campo readonly com o link
- Botão Copiar
- Botão Fechar
Importante hoje: o ConectAI não envia o e-mail automaticamente. Você copia o link e envia pelo seu canal de comunicação (e-mail próprio, WhatsApp interno, Slack do time).
O convidado abre o link, define nome + senha, e é redirecionado para
/login.Validações automáticas:
- Token tem que existir e estar
pending(não usado nem revogado) - Não pode estar expirado
- E-mail vem pré-definido pelo convite (read-only)
- Nome ≥ 2 chars, senha ≥ 6 chars
- Token tem que existir e estar
Trocar role de um usuário
No card do usuário, clique no select de role → escolha a nova → o ConectAI faz PATCH /api/users/:id com {roleId}.
A mudança é imediata — na próxima request do user, ele já tem as novas permissões.
Multi-org (usuários em mais de um provedor)
Se um usuário pertence a múltiplas orgs (consultor, parceiro, time da agência):
- O badge {N} orgs aparece no card
- Clicar abre o UserOrgsDialog com checklist
- Marca/desmarca orgs e salva (PATCH
/api/users/:id/orgs)
Quando o user tem múltiplas orgs, aparece um OrgSelector no header das telas relevantes para ele alternar.
Inativar usuário
Botão Power no card. Abre confirmação. PATCH /api/users/:id com {active:false}.
Inativar não exclui o usuário — apenas bloqueia o login. Pode reativar a qualquer momento.
Você não consegue inativar a si mesmo (botão escondido para
isSelf).
Roles e permissões
O que é uma role
Uma role é um conjunto agregado de permissões. Cada permissão é uma string categoria:acao:
canais:view— pode ver a lista de canaiscanais:edit— pode criar/editar canaisassinantes:export— pode exportar listaauditoria:view/auditoria:export— pode ver / exportar audit log
As 28 categorias
dashboard, agentes, conhecimento, escalonamento, canais, historico, agenda, plano, usuarios, admin, auditoria, telefonia, campanhas, incidentes, assinantes, integracoes, compliance, inbox, whatsapp_groups, chat_interno, relatorios, inteligencia, sistema, task, live_voice, subflow, flows, comunicacao.
Scope: global vs scoped
Cada role tem um scope:
| Scope | Significa |
|---|---|
global | Vê todas as orgs (super-admin do ConectAI) — bypassa filtros de organizationId |
scoped | Vê apenas a org dele — comportamento normal |
Se você é admin do ConectAI atendendo múltiplos provedores, sua role tem scope global.
Roles do sistema (não editáveis)
Algumas roles vêm de fábrica e têm flag isSystem:
- Admin — todas as permissões da org
- Analista — atendimento, histórico, métricas
- Agente — atendimento básico
- Somente leitura — sem edição
Roles do sistema não podem ser deletadas. Se você precisa de um conjunto diferente, crie uma role customizada em /config/grupos.
Criar role customizada
Em /config/grupos (permissão admin:view):
- Clique Nova role
- Defina nome + descrição
- Marque/desmarque permissions na taxonomia (cada categoria é expansível)
- Defina scope:
globalouscoped - Salve
A role nova aparece no dropdown de convites e no select de roles do usuário.
Edge cases
Convite expirado
Página /invites/accept mostra:
“Este convite expirou.” + link para login (caso o user já tenha conta).
Convite revogado / usado
“Este convite já foi utilizado ou revogado.”
E-mail já cadastrado
Se você convida alguém que já tem conta na org, o convite é bloqueado com erro:
“Este e-mail já tem acesso à organização.”
Usuário inativado tenta logar
Server retorna erro de autenticação (“Conta inativa”). Reative no painel pra restaurar.
Self-inativação
Você não consegue desligar seu próprio usuário (proteção contra lockout acidental).
Roadmap (em breve)
- Envio automático de e-mail com link de convite (hoje é manual)
- 2FA (autenticação em 2 fatores)
- SSO (Google/Microsoft login)
- Histórico de mudança de role por usuário