feat(frontend): Administração > Usuários e Perfis (convidar, trocar papel)

POST /users (convidar) fecha uma lacuna real: até aqui só dava pra
adicionar alguém a um tenant criando o tenant inteiro ou via script. Se o
e-mail já existe na plataforma, só adiciona membership+role (sem tocar na
senha); se não existe, cria a conta com senha gerada e revelada uma única
vez. PATCH /users/:id/role troca o papel (substitui, 1 papel por tenant).

GET /roles novo (tenant-facing) — versão de /platform/roles filtrada só
pras roles de escopo TENANT, sem expor que platform_super_admin existe.

Frontend: /app/administracao/usuarios (convidar com papel, trocar papel
de qualquer membro exceto o próprio usuário logado) e /perfis (o que cada
papel pode fazer, só leitura).

Testado ponta a ponta contra a API real: convidada conta nova com senha
revelada, convidado usuário com papel Agente, trocado pra Supervisor via
PATCH, confirmado persistido. Perfis mostra as 3 roles de tenant certas.
Smoke test nas 19 telas do tenant + 10 telas platform, todas 200.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8
This commit is contained in:
2026-08-30 00:22:18 -03:00
parent 03ec0d556b
commit e9dc973aee
16 changed files with 593 additions and 16 deletions

View File

@@ -0,0 +1,18 @@
export interface RoleInfo {
key: string;
name: string;
}
export interface TenantMember {
id: string;
email: string;
name: string;
status: "ACTIVE" | "DISABLED";
role: RoleInfo | null;
}
export const TENANT_ROLE_OPTIONS: { key: string; name: string }[] = [
{ key: "tenant_admin", name: "Tenant Admin" },
{ key: "supervisor", name: "Supervisor" },
{ key: "agent", name: "Agente" },
];