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 agendamento✅✅✅Próprios❌
Finalizar atendimento✅✅❌Próprios❌
Configurar disponibilidade✅✅❌Pró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 operacional✅✅✅Próprios✅
Relatório financeiro✅✅❌❌✅
Relatório de agendamentos✅✅✅Próprios✅
Exportar relatório✅✅Parcial❌✅

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.