Ir al contenido

Ver Registros de Acceso

Consulta el historial de inicios de sesión de los usuarios del sistema.

  1. En Configuración → Empleados, desplázate a “Registros de Acceso”.
  2. Revisa la tabla con los accesos registrados.
  3. (Opcional) Filtra por fecha, usuario o dispositivo.
ColumnaDescripción
UsuarioNombre y email del usuario
Fecha y HoraTimestamp del acceso
IPDirección IP de origen
DispositivoNavegador y sistema operativo
EstadoÉxito o Fallido

Seguridad:

  • Detecta accesos no autorizados
  • Verifica intentos fallidos
  • Rastrea actividad inusual

Auditoría:

  • Cumplimiento RGPD
  • Registro de actividad laboral
  • Verificación de horarios

Soporte:

  • Diagnóstico de problemas de acceso
  • Identificación de dispositivos problemáticos
FiltroDescripción
Rango de fechasDesde/hasta
UsuarioPor nombre o email
EstadoÉxito o Fallido
IPDirección específica
  • La tabla muestra registros ordenados por fecha descendente.
  • Filtros aplican correctamente.
  • Puedes exportar a Excel si necesitas análisis externo.

Detalles técnicos — Ver Registros de Acceso

Sección titulada «Detalles técnicos — Ver Registros de Acceso»
Detalles técnicos

Tabla: access_logs

Campos principales:

interface AccessLog {
id: string;
user_id: string;
business_id: string;
login_at: timestamp;
ip_address: string;
user_agent: string;
success: boolean;
failure_reason?: string;
created_at: timestamp;
}

Componente: src/panels/admin/components/AccessLogsTable.tsx

RLS Policy:

-- Solo propietarios del negocio pueden ver logs
CREATE POLICY "access_logs_owner_view"
ON access_logs FOR SELECT
USING (
business_id IN (
SELECT business_id FROM user_businesses
WHERE user_id = auth.uid()
)
);

Query de accesos recientes:

SELECT al.*, p.first_name, p.last_name, u.email
FROM access_logs al
JOIN auth.users u ON al.user_id = u.id
LEFT JOIN profiles p ON al.user_id = p.id
WHERE al.business_id = '<business_id>'
ORDER BY al.login_at DESC
LIMIT 100;

Query de intentos fallidos:

SELECT al.*, u.email,
COUNT(*) OVER (PARTITION BY al.user_id, DATE(al.login_at)) as intentos_dia
FROM access_logs al
JOIN auth.users u ON al.user_id = u.id
WHERE al.business_id = '<business_id>'
AND al.success = false
AND al.login_at >= NOW() - INTERVAL '7 days'
ORDER BY al.login_at DESC;

Análisis de patrones:

-- Horarios de acceso más frecuentes
SELECT
EXTRACT(HOUR FROM login_at) as hora,
COUNT(*) as accesos,
COUNT(DISTINCT user_id) as usuarios_unicos
FROM access_logs
WHERE business_id = '<business_id>'
AND success = true
AND login_at >= NOW() - INTERVAL '30 days'
GROUP BY hora
ORDER BY hora;