turnero: restricción por token de navegador en lugar de IP pública

- Token UUID generado en localStorage del navegador, persistido como cookie
- turnero_dispositivos.token: nueva columna para identificar equipos
- recepcion.php y lugar.php: chequean token (cookie) primero, IP como fallback
- configuracion.php: banner con token del equipo actual + botón "Registrar este equipo"
- save_dispositivo.php: acepta campo token al crear/editar dispositivo
- Migración: 20260709_dispositivos_token.sql

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-09 10:56:53 -05:00
co-authored by Claude Sonnet 4.6
parent 9651f14302
commit d5b6de1f46
6 changed files with 142 additions and 112 deletions
+7 -6
View File
@@ -23,22 +23,23 @@ $ip = trim($input['ip'] ?? '');
$nombre = trim($input['nombre'] ?? '');
$lugarId = (int)($input['lugar_id'] ?? 0);
$activo = (int)($input['activo'] ?? 1);
$token = trim($input['token'] ?? '') ?: null;
if ($ip === '') jsonError('La IP es requerida');
if ($nombre === '') jsonError('El nombre es requerido');
if ($lugarId <= 0) jsonError('Debes asignar un lugar');
if ($ip === '' && $token === null) jsonError('Se requiere IP o token de dispositivo');
if ($id) {
$stmt = db()->prepare(
'UPDATE turnero_dispositivos SET ip=?, nombre=?, lugar_id=?, activo=? WHERE id=?'
'UPDATE turnero_dispositivos SET ip=?, nombre=?, lugar_id=?, activo=?, token=? WHERE id=?'
);
$stmt->execute([$ip, $nombre, $lugarId, $activo, $id]);
$stmt->execute([$ip, $nombre, $lugarId, $activo, $token, $id]);
jsonOk(['id' => $id], 'Dispositivo actualizado');
} else {
$stmt = db()->prepare(
'INSERT INTO turnero_dispositivos (ip, nombre, lugar_id, activo) VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE nombre=VALUES(nombre), lugar_id=VALUES(lugar_id), activo=VALUES(activo)'
'INSERT INTO turnero_dispositivos (ip, nombre, lugar_id, activo, token) VALUES (?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE nombre=VALUES(nombre), lugar_id=VALUES(lugar_id), activo=VALUES(activo), token=VALUES(token)'
);
$stmt->execute([$ip, $nombre, $lugarId, $activo]);
$stmt->execute([$ip, $nombre, $lugarId, $activo, $token]);
jsonOk(['id' => (int)db()->lastInsertId()], 'Dispositivo creado');
}