Skip to content

Usuários e RBAC

Papéis Disponíveis

O SystemClinic implementa controle de acesso baseado em papéis (RBAC) com seis níveis de permissão:

PapelCódigoDescrição
Super AdminSUPER_ADMINAcesso cross-tenant para equipe da plataforma
DonoOWNERAcesso total ao tenant
AdministradorADMINAcesso operacional completo
RecepcionistaRECEPTIONISTAgenda, pacientes e financeiro básico
ProfissionalPROFESSIONALPrópria agenda e prontuários
VisualizadorVIEWERApenas leitura (relatórios e dashboards)

Hierarquia de Acesso

SUPER_ADMIN  (nível 6 — plataforma)
    └── OWNER        (nível 5 — organização)
            └── ADMIN        (nível 4)
                    ├── RECEPTIONIST  (nível 3)
                    ├── PROFESSIONAL  (nível 2)
                    └── VIEWER        (nível 1)

Matriz Completa de Permissões

Módulo de Agendamentos

AçãoOWNERADMINRECEPTIONISTPROFESSIONALVIEWER
Ver todos os agendamentos
Ver próprios agendamentos
Criar agendamento
Editar agendamento
Cancelar agendamentoPróprios
Finalizar atendimentoPróprios
Configurar disponibilidadePrópria

Módulo de Pacientes

AçãoOWNERADMINRECEPTIONISTPROFESSIONALVIEWER
Listar pacientes
Criar paciente
Editar dados do paciente
Inativar paciente
Mesclar pacientes
Exportar dados LGPD

Módulo de Prontuário

AçãoOWNERADMINRECEPTIONISTPROFESSIONALVIEWER
Ver prontuário (todos)
Ver prontuário (próprios)
Criar registro
Assinar registro
Fazer upload de arquivo

Módulo Financeiro

AçãoOWNERADMINRECEPTIONISTPROFESSIONALVIEWER
Ver faturas
Criar fatura
Registrar pagamento
Aplicar desconto✅ (sem limite)✅ (sem limite)✅ (até limite%)
Emitir NFS-e
Ver relatórios financeiros

Módulo de Relatórios

AçãoOWNERADMINRECEPTIONISTPROFESSIONALVIEWER
Dashboard operacionalPróprios
Relatório financeiro
Relatório de agendamentosPróprios
Exportar relatórioParcial

Módulo de Administração

AçãoOWNERADMINRECEPTIONISTPROFESSIONALVIEWER
Gerenciar usuários
Convidar usuário
Alterar papel de usuário
Inativar usuário
Configurações da clínica
Configurar integrações
Ver audit log
Gerenciar plano

Escopos de Unidade

Além do papel, usuários podem ter acesso restrito a unidades específicas via unit_ids[]:

  • Um profissional vinculado à Unidade A não vê a agenda da Unidade B
  • Um administrador pode ter acesso cross-unidade explicitamente
  • O Owner tem acesso a todas as unidades por padrão

Convidar Usuário

  1. Acesse Usuários → Convidar Usuário
  2. Informe:
    • E-mail do novo usuário
    • Papel (role)
    • Unidades de acesso
  3. O usuário recebe um e-mail com link de convite (válido por 48 horas)
  4. Ao clicar no link, o usuário define sua senha e acessa o sistema

Alterar Papel de Usuário

Quando um Admin altera o papel de um usuário:

  1. O novo papel é salvo no banco
  2. Todos os refresh tokens do usuário são revogados imediatamente
  3. Na próxima requisição, o usuário recebe 401 e é redirecionado para login
  4. Ao fazer login novamente, o JWT reflete o novo papel

Isso garante que mudanças de permissão tenham efeito imediato, sem esperar a expiração do token.

Inativar Usuário

Usuários inativos:

  • Não conseguem fazer login (401 retornado pela API)
  • Têm todos os refresh tokens revogados
  • Aparecem apenas com filtro "inativos" na listagem

A inativação não exclui o usuário do banco — todas as ações históricas no audit log são preservadas.

Endpoints da API

MétodoEndpointPapel mínimo
GET/usersAdmin
GET/users/:idAdmin
POST/users/inviteAdmin
PUT/users/:idAdmin
DELETE/users/:id (inativação)Admin

Implementação Técnica

O RBAC é implementado em duas camadas:

Camada 1 — Policy-based no .NET:

csharp
[Authorize(Policy = "RequireAdminOrAbove")]
[HttpGet("reports/cashflow")]
public async Task<IActionResult> GetCashflow() { ... }

Camada 2 — RbacService no Angular:

typescript
// Verificação no componente
if (this.rbac.isAtLeast('ADMIN')) {
  // exibir botão de relatório financeiro
}

// Guard de rota
canActivate: [() => inject(RbacService).hasRole('OWNER')]

Acesso

  • URL: /app/users
  • Guard: Requer autenticação + papel Admin ou superior

Desenvolvido com ❤️ pela equipe FastGivr.