Protección por Inactividad (Idle Lock)
El módulo de bloqueo de pantalla por inactividad protege las estaciones de trabajo desatendidas en entornos corporativos, garantizando que un operador que se aleja de su equipo no deje expuesta información confidencial.
1. Funcionamiento del Detector en Frontend
Un script JavaScript monitorea continuamente los eventos de interacción del operador dentro de la ventana:
mousemove,mousedown,keypress,touchmove,scroll.visibilitychangeyfocus(detecta cuando el usuario minimiza el navegador o cambia de pestaña).
flowchart TD
NORMAL["[Operación Normal]"]
TIMER["Cronómetro: 15 minutos (security_idle_timeout)"]
MODAL["[Modal de Advertencia: 60 segundos (security_idle_warning)]<br/>[Barra regresiva animada con porcentaje en tiempo real]"]
RESET["[Reset de Cronómetro]"]
LOCK["1. POST /api/system/lock<br/>2. Marca session(['is_locked' => true])<br/>3. Redirige a /bloqueo"]
NORMAL --> TIMER
TIMER --> MODAL
MODAL -->|"Clic 'Mantener Sesión Activa'"| RESET
MODAL -->|"Tiempo Agotado (0 segs)"| LOCK
2. El Middleware Guardián (CheckSessionLock)
El middleware con alias 'session.lock' protege el acceso al panel administrativo:
// app/Http/Middleware/CheckSessionLock.php
public function handle(Request $request, Closure $next)
{
if (session('is_locked', false)) {
$allowedRoutes = ['system.lock.show', 'system.lock.unlock', 'logout'];
if (!in_array($request->route()->getName(), $allowedRoutes)) {
return redirect()->route('system.lock.show');
}
}
return $next($request);
}
3. Pantalla de Desbloqueo (/bloqueo) & Restauración de URL
La vista /bloqueo aísla al usuario:
- Despliega el avatar y nombre del operador.
- Oculta menús, barras de herramientas y accesos del sistema.
- Exige el reingreso exclusivo de la contraseña.
- Al validar (
Hash::check), el controlador desactiva el candado (session(['is_locked' => false])) y redirige al usuario exactamente a la misma URL en la que se encontraba trabajando, sin pérdida de contexto.