Pular para conteúdo

Núcleo — usuários e auditoria

Código: backend/apps/core/

Usuários e papéis

Modelo Usuario (tabela core_usuario), baseado no usuário padrão do Django. O login é por e-mail e senha (ADR 0009): não há nome de usuário.

Campo Uso
email Identifica o usuário no login. Único, guardado em minúsculas; o login não diferencia maiúsculas de minúsculas

Campos próprios do sistema:

Campo Uso
papel administrador, tecnico ou visualizador (ADR 0005)
whatsapp Número para notificações (usado a partir da F4)

Regras:

  • eh_administrador: superusuário ou papel administrador.
  • pode_editar: administrador ou técnico. O visualizador só consulta.

Permissões para as views da API (apps/core/permissoes.py):

Classe Leitura Alteração
VisualizadorLe qualquer usuário logado técnico e administrador
SomenteAdministrador administrador administrador

Login (API)

Autenticação por sessão (cookie), com proteção CSRF. O frontend chama, nesta ordem:

Passo Endpoint Observação
1 GET /api/auth/csrf/ Recebe o cookie csrftoken
2 POST /api/auth/login/ email e password; enviar o cabeçalho X-CSRFToken
— GET /api/auth/eu/ Dados do usuário logado (papel, pode_editar)
— POST /api/auth/logout/ Encerra a sessão

A sessão dura 12 horas.

Auditoria

Tudo que herda de ModeloAuditado é registrado automaticamente em RegistroAuditoria (ADR 0004):

Ação Quando O que guarda
criou Criação Estado depois
alterou Alteração com mudança real Antes, depois e campos alterados
excluiu Exclusão Estado antes
login / logout Entrada e saída Usuário e IP
login_falhou E-mail ou senha errados E-mail informado e IP (nunca a senha)
  • Rotinas automáticas aparecem como usuário "sistema".
  • Em scripts, para atribuir alterações a alguém: with como_usuario(usuario): ...
  • Consulta em /admin/ → Registros de auditoria, somente leitura.

Como tornar um modelo auditado

from apps.core.models import ModeloAuditado

class Cto(ModeloAuditado):
    ...
    campos_ocultos_auditoria = ("campo_sensivel",)  # opcional

Administração (/admin/)

Visual moderno (Unfold), com menu lateral em português: Acesso (usuários, grupos, auditoria), Rotinas agendadas e Ajuda (documentação e API). O tema (Claro, Escuro ou Sistema, padrão Sistema) fica no menu da conta, no canto inferior esquerdo. Ver ADR 0010.

Saúde do sistema

GET /api/saude/ (sem login) responde 200 com {"status": "ok", "banco": "ok", "redis": "ok"}, ou 503 se algo estiver fora. É usado pelo Docker (healthcheck) e pode ser usado pelo Zabbix.