feat: login unificado BI-CCC com deteccao automatica de role

- Adiciona coluna 'role' na tabela agentes (agente|admin)
- Migra admins existentes para tabela agentes com role='admin'
- Unifica login em /login com redirect baseado em role
- Sessao unificada req.session.user com {id, email, nome, role, agente_id}
- Middleware requireRole() para proteger rotas por role
- Admin panel com selector de role ao criar/editar usuarios
- Atualiza branding para "BI - CCC" com logo CambioReal
- Redirects: /admin/login -> /login, /admin/logout -> /logout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-08 13:03:52 -05:00
parent 39900c3fe8
commit be2b090ddc
9 changed files with 2710 additions and 96 deletions

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BI Agentes — Login</title>
<title>BI - CCC | CambioReal</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<style>
:root {
@@ -45,24 +45,31 @@
margin-bottom: 32px;
}
.login-header .logo {
width: 56px; height: 56px;
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%);
border-radius: 14px;
display: flex; align-items: center; justify-content: center;
width: 80px; height: 80px;
margin: 0 auto 16px;
font-size: 28px;
color: white;
}
.login-header .logo img {
width: 100%; height: 100%;
object-fit: contain;
}
.login-header h1 {
font-size: 22px;
font-size: 24px;
font-weight: 800;
color: var(--text);
letter-spacing: -0.5px;
}
.login-header .subtitle {
font-size: 12px;
color: var(--primary);
margin-top: 4px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 1px;
}
.login-header p {
font-size: 13px;
color: var(--text-secondary);
margin-top: 6px;
margin-top: 8px;
}
.form-group {
margin-bottom: 20px;
@@ -134,15 +141,16 @@
<div class="login-container">
<div class="login-card">
<div class="login-header">
<div class="logo">&#x2194;</div>
<h1>BI Agentes</h1>
<p>CambioReal &mdash; Dashboard de Transacoes</p>
<div class="logo"><img src="/public/logo-small.png" alt="CambioReal"></div>
<h1>BI - CCC</h1>
<div class="subtitle">Central Command Center</div>
<p>Acesso unificado para agentes e admins</p>
</div>
<div class="error-msg" id="errorMsg"></div>
<form id="loginForm" method="POST" action="/login">
<div class="form-group">
<label>E-mail</label>
<input type="email" name="email" id="email" required placeholder="agente@email.com" autocomplete="email">
<input type="email" name="email" id="email" required placeholder="seu@email.com" autocomplete="email">
</div>
<div class="form-group">
<label>Senha</label>

BIN
public/logo-small.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB