// ===== FUNCIONES PARA MÓDULOS DINÁMICOS ===== /** * Leer configuración de módulos desde MySQL */ function leer_modulos() { $conn = mysql_acceso_conectar(); if (!$conn) return []; $modulos = []; $result = $conn->query("SELECT modulo, owner, fundador, administrador, user FROM config_modulos"); if ($result === false) { error_log('Error leyendo config_modulos: ' . $conn->error); return []; } while ($row = $result->fetch_assoc()) { $modulos[$row['modulo']] = [ 'owner' => (bool)$row['owner'], 'fundador' => (bool)$row['fundador'], 'administrador' => (bool)$row['administrador'], 'user' => (bool)$row['user'], ]; } return $modulos; } /** * Verificar si un puesto tiene acceso a un módulo */ function tiene_acceso_modulo($puesto, $modulo) { static $cache = []; if (empty($cache)) { $cache = leer_modulos(); } if (!isset($cache[$modulo])) { return false; } $puesto_key = strtolower($puesto); return $cache[$modulo][$puesto_key] ?? false; } /** * Actualizar configuración de un módulo */ function actualizar_modulo($modulo, $owner, $fundador, $administrador, $user) { $conn = mysql_acceso_conectar(); if (!$conn) return false; $stmt = $conn->prepare("UPDATE config_modulos SET owner = ?, fundador = ?, administrador = ?, user = ? WHERE modulo = ?"); $o = (int)$owner; $f = (int)$fundador; $a = (int)$administrador; $u = (int)$user; $stmt->bind_param('iiiis', $o, $f, $a, $u, $modulo); $result = $stmt->execute(); $stmt->close(); return $result; } /** * Obtener lista de módulos disponibles */ function listar_modulos() { $conn = mysql_acceso_conectar(); if (!$conn) return []; $modulos = []; $result = $conn->query("SELECT modulo, descripcion, owner, fundador, administrador, user FROM config_modulos"); if ($result === false) { return []; } while ($row = $result->fetch_assoc()) { $modulos[] = [ 'modulo' => $row['modulo'], 'descripcion' => $row['descripcion'], 'owner' => (bool)$row['owner'], 'fundador' => (bool)$row['fundador'], 'administrador' => (bool)$row['administrador'], 'user' => (bool)$row['user'], ]; } return $modulos; } TJCHECK
🔒 Acceso Restringido
Para personal autorizado solamente.
Todos los intentos serán monitoreados.