CAMPOS_CONEXION_PUBLICOS
Campos de la tabla `conexion` que pueden viajar al navegador.
public
mixed
CAMPOS_CONEXION_PUBLICOS
= ['id', 'nombre', 'host', 'puerto', 'descripcion']
Lista blanca a propósito: esa tabla guarda credenciales de las
bases de
explotación (usuario, password) y estas fichas se sirven tal cual al
selector de conexiones. Todo lo que no esté aquí no sale del servidor.
CONTEXTO_API
Marca la petición como perteneciente a la API. La red de fatales de
bootstrap.php la consulta para decidir si responde en JSON: en las
páginas web no debe hacerlo, o el navegador mostraría el objeto en crudo.
public
mixed
CONTEXTO_API
= \true
Debe definirse ANTES de incluir el bootstrap.
DIR_FRONTEND
public
mixed
DIR_FRONTEND
= __DIR__ . '/../../frontend'
DIR_RUTAS
public
mixed
DIR_RUTAS
= __DIR__ . '/../api/v2_test/rutas'
ESCRIBEN_SESION
Acciones cuyo handler modifica $_SESSION. Deben declarar escribeSesion:
true, o el despachador liberará el bloqueo de sesión antes de ejecutarlas
y sus escrituras no se persistirán.
public
mixed
ESCRIBEN_SESION
= ['login', 'cambiar_campania', 'update_user_permisos']
Lista mantenida a mano, pero convierte un fallo silencioso —el
caso del
token CSRF que el servidor nunca llega a guardar— en un error visible.
EXCLUIDOS
Directorios que no forman parte del código propio.
public
mixed
EXCLUIDOS
= '#[\\\\/](node_modules|dist|vendor|\.git|\.idea)[\\\\/]#'
PAGINAS_ROL_MINIMO
Páginas cuyo acceso NO depende de la tabla `permisos` sino del rol.
public
mixed
PAGINAS_ROL_MINIMO
= [
'paneladministrador' => 1,
// admin y super
'panelpaginas' => 1,
// admin y super
'panelconexiones' => 2,
// solo super
'panelconfiguracion' => 2,
]
Funcionan estén o no dadas de alta en la tabla paginas.
Clave = ruta canónica (minúsculas, sin carpeta ni .php).
PATRONES_ACCION
Formas en que el frontend puede declarar la acción. La primera cubre el
objeto literal de $.ajax; la segunda, las subidas con FormData; la
tercera, las cadenas de consulta construidas a mano.
public
mixed
PATRONES_ACCION
= ['/[\'"]?action[\'"]?\s*[:=]\s*[\'"]([a-zA-Z0-9_]+)[\'"]/', '/append\(\s*[\'"]action[\'"]\s*,\s*[\'"]([a-zA-Z0-9_]+)[\'"]/', '/action=([a-zA-Z0-9_]+)/']
PERMISOS_TTL
public
mixed
PERMISOS_TTL
= 300
PERMISOS_TTL_REINTENTO
public
mixed
PERMISOS_TTL_REINTENTO
= 30
PREFIJOS_ESCRITURA
Prefijos que delatan una acción de escritura por su nombre.
public
mixed
PREFIJOS_ESCRITURA
= ['crear_', 'insert_', 'eliminar_', 'delete_', 'modificar_', 'update_', 'actualizar_', 'anadir_', 'add_', 'ajuste_', 'ajustar_', 'asignar_', 'deshabilitar_', 'habilitar_', 'reajustar_', 'cambio_', 'set_']
RID
public
mixed
RID
= \bin2hex(\random_bytes(4))
SESSION_TIMEOUT_SECONDS
public
mixed
SESSION_TIMEOUT_SECONDS
= 30 * 60
registrarRutas()
Combina los módulos detectando colisiones.
registrarRutas(array<string, Ruta> ...$modulos) : array<string, Ruta>
array_merge sobrescribiría en silencio una acción declarada
dos veces, y
podría prevalecer la que tiene el nivel de acceso más permisivo.
Parameters
-
$modulos
: array<string, Ruta>
-
-
throws
-
LogicException
si una acción está declarada en más de un módulo
Return values
array<string, Ruta>
jsonResponse()
jsonResponse(mixed $data[, int $status = 200 ]) : never
Parameters
-
$data
: mixed
-
-
$status
: int
= 200
-
requireAuthApi()
Valida sesión activa + binding IP/UA.
requireAuthApi() : void
Aborta con 401 si no supera la comprobación.
Renombrada respecto a auth_guard::requireAuthPage para diferenciar:
- requireAuthApi() → endpoints (este archivo) → responde JSON 401
- requireAuthPage() → páginas .php → redirige a login
requirePermisos()
Valida que el usuario tiene permiso para una página sobre TODAS las
conexiones recibidas. Aborta con 403 si falla.
requirePermisos() : array{paginaId: int, conexionIds: int[]}
Lee pagina_id y conexion_ids (JSON array) del POST.
Return values
array{paginaId: int, conexionIds: int[]}
obtenerFechaActual()
Devuelve la fecha y hora actuales en formato MySQL.
obtenerFechaActual() : string
writeLog()
Registra una acción en la tabla `log` de la base de datos tracking.
writeLog(string $frase, int $conexionId) : void
Parameters
-
$frase
: string
-
Descripción de la acción realizada.
-
$conexionId
: int
-
_agSesion()
Comprueba que la sesion está abierta o sino la abre
_agSesion() : void
rutaCanonica()
Normaliza cualquier forma de ruta a una única clave.
rutaCanonica(string $ruta) : string
Parameters
-
$ruta
: string
-
_agCacheVacia()
Crea una cache vacia con un error por parametro
_agCacheVacia([string|null $error = null ]) : array<string|int, mixed>
Parameters
-
$error
: string|null
= null
-
Return values
array<string|int, mixed>
permisosCache()
Devuelve la caché, construyéndola o revalidándola si toca.
permisosCache() : array<string|int, mixed>
Return values
array<string|int, mixed>
conexionesDePagina()
Conexiones sobre las que el usuario puede operar en esa página.
conexionesDePagina(string $ruta) : array<string|int, int>
Parameters
-
$ruta
: string
-
: ruta de la pagina a la que se quiere acceder
Return values
array<string|int, int>
—
puedeAccederPagina()
¿Puede el usuario ver la página? Basta con 1 permiso.
puedeAccederPagina(string $ruta) : bool
Parameters
-
$ruta
: string
-
conexionesDisponibles()
Conexiones de la página ya "hidratadas" con su ficha (id, nombre,
host…).
conexionesDisponibles(string $ruta) : array<int, array<string|int, mixed>>
Es lo que consume conexion-selector.js.
Parameters
-
$ruta
: string
-
: ruta de la que se quiere obtener sus conexiones
Return values
array<int, array<string|int, mixed>>
Árbol de menú ya filtrado por permisos, listo para renderizar.
menuSidebar() : array<string|int, mixed>
Return values
array<string|int, mixed>
paginaPrincipal()
Ruta canónica de la primera página accesible (destino tras el login).
paginaPrincipal() : string|null
Return values
string|null
conexionPorDefecto()
Primera conexión sobre la que el usuario tiene algún permiso.
conexionPorDefecto() : int|null
invalidarCachePermisos()
Fuerza la reconstrucción en la PRÓXIMA lectura (solo de la sesión
actual).
invalidarCachePermisos() : void
requireAuthPage()
Comprueba si el usuario tiene acceso a la pagina que lo invoca
requireAuthPage(string $ruta) : void
Parameters
-
$ruta
: string
-
: ruta de la pagina invocante
sesionExpiradaPorInactividad()
Timeout por INACTIVIDAD. true = expirada.
sesionExpiradaPorInactividad([bool $renovar = true ]) : bool
Parameters
-
$renovar
: bool
= true
-
_construirCachePermisos()
Construccion de la cache
Se construye al hacer loggin y se renueva segune el TTL definido al principio del archivo
_construirCachePermisos(int $userId, int $rol) : array<string|int, mixed>
Parameters
-
$userId
: int
-
: id del usuario solicitante
-
$rol
: int
-
: rol del usuario solicitante
Return values
array<string|int, mixed>
—
Coloca una página en el árbol categoria → subcategoria →
subsubcategoria.
_agInsertarEnMenu(array<string|int, mixed> &$menu, array<string|int, mixed> $p, string $clave) : void
Parameters
-
$menu
: array<string|int, mixed>
-
-
$p
: array<string|int, mixed>
-
-
$clave
: string
-
prompt()
prompt(string $label[, string|null $default = null ][, bool $required = true ]) : string
Parameters
-
$label
: string
-
-
$default
: string|null
= null
-
-
$required
: bool
= true
-
promptInt()
promptInt(string $label, int $default) : int
Parameters
-
$label
: string
-
-
$default
: int
-
promptBool()
promptBool(string $label, bool $default) : bool
Parameters
-
$label
: string
-
-
$default
: bool
-
promptPassword()
Lee una contraseña ocultando el eco en sistemas Unix.
promptPassword(string $label) : string
En Windows muestra el texto en claro (limitación de stty).
Parameters
-
$label
: string
-
sqlEscape()
Escapa una cadena para inclusión segura en una sentencia SQL como
literal.
sqlEscape(string $s) : string
Solo para uso de presentación (el INSERT que muestra el
script).
Parameters
-
$s
: string
-