docs: documenta login por sessao e perfis admin/padrao no README

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Gustavo
2026-08-13 21:04:37 -03:00
co-authored by Claude Sonnet 5
parent 64990b6db2
commit a71b990a3c
+25 -3
View File
@@ -8,11 +8,33 @@ Proteções: login HTTP Basic em toda rota, CSRF via cookie de duplo envio (`app
A rota `/log` mostra o histórico de ações do painel (tabela `LOG_PAINEL`, criada no banco de dev — **precisa ser criada manualmente em produção também**, DDL no início de `app/db/log.py`) e, se `N8N_API_URL`/`N8N_API_KEY` estiverem configuradas (`.env.example`), os últimos envios automáticos de chave via WhatsApp (lidos da Data Table `pagamentos_processados` do n8n, somente leitura).
## Login por funcionário
## Login e permissões
Cada funcionário pode ter seu próprio usuário/senha (tabela `FUNCIONARIO_PAINEL`, criada no banco de dev — **precisa ser criada manualmente em produção também**, DDL no início de `app/db/funcionarios.py`; senha em hash `scrypt`, nunca texto puro). Gerencie em **Funcionários** no menu.
O painel usa login por sessão (cookie assinado, `app/session.py`) — não é
mais HTTP Basic Auth. Defina `SESSION_SECRET` no `.env` (`.env.example`
tem o exemplo); sem isso, uma chave é gerada em memória a cada start do
processo, o que derruba todas as sessões ativas a cada restart (funciona,
só incomoda).
`ADMIN_USER`/`ADMIN_PASSWORD` (`.env.example`) continuam funcionando como conta de bootstrap — é com ela que você entra a primeira vez para cadastrar o primeiro funcionário, e serve de plano B se a tabela ficar vazia. Login checa primeiro o admin do `.env`, depois `FUNCIONARIO_PAINEL` (só contas com `ATIVO=1`). O log de ações mostra o nome de quem fez cada coisa.
Cada funcionário (`FUNCIONARIO_PAINEL`, criada no banco de dev — **precisa
ser criada manualmente em produção também**, DDL no início de
`app/db/funcionarios.py`) tem um perfil: **admin** (gerencia outros
funcionários em `/funcionarios`: cadastra, edita, redefine senha,
ativa/desativa, promove/rebaixa perfil) ou **padrão** (sem acesso a
`/funcionarios`). Todo funcionário cadastrado antes dessa funcionalidade
existir virou admin automaticamente na migração (`ALTER TABLE
FUNCIONARIO_PAINEL ADD COLUMN PERFIL ...`, mesmo arquivo). O sistema nunca
deixa ficar sem nenhum admin ativo — rebaixar ou desativar o último admin é
bloqueado.
Qualquer usuário logado troca a própria senha em **Minha conta**
(`/minha-conta`), pedindo a senha atual antes de trocar.
`ADMIN_USER`/`ADMIN_PASSWORD` (`.env.example`) continuam funcionando como
conta de bootstrap, sempre com perfil admin — é com ela que você entra a
primeira vez para cadastrar o primeiro funcionário, e serve de plano B se
a tabela ficar vazia. Login checa primeiro o admin do `.env`, depois
`FUNCIONARIO_PAINEL` (só contas com `ATIVO=1`).
## Rodando localmente (sem Docker)