resources/views/pages/frontend/docs/bloqueo-inactividad.md
Última modificación: 24 Oct, 2026

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.
  • visibilitychange y focus (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.

Enlaces Relacionados

Edita este documento en >> bloqueo-inactividad.md
← Volver a la Landing Page