administrador.modelado.params_sql.asigna_seguridad_data - gamboamartin/administrador GitHub Wiki

asigna_seguridad_data

La función asigna_seguridad_data es una función privada que valida la seguridad de las columnas adicionales de un modelo y genera una condición SQL WHERE basada en la seguridad del usuario. Esta función asegura que las consultas SQL estén protegidas y solo muestren datos permitidos para el usuario actual.

Signatura


private function asigna_seguridad_data(array $modelo_columnas_extra, string $sql_where_previo): array|string

Parámetros

  • array $modelo_columnas_extra:
    Un array que contiene las columnas adicionales del modelo, las cuales incluyen información relacionada con la seguridad, como la columna usuario_permitido_id.

  • string $sql_where_previo:
    Una cadena que representa la cláusula WHERE previa que se debe combinar con la condición de seguridad generada.

Retorno

  • array|string:
    Retorna una cadena que representa la condición SQL WHERE generada, combinada con la condición de seguridad basada en el usuario actual. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Validación de seguridad:

    • La función llama a valida_seguridad() para verificar que las columnas adicionales del modelo, especialmente aquellas relacionadas con la seguridad, sean válidas.
    • Si ocurre un error durante la validación, se genera un mensaje de error y se retorna un array con el mensaje de error.
  2. Generación de la cláusula WHERE:

    • La función llama a where() para generar la cláusula WHERE a partir de la condición previa proporcionada en $sql_where_previo.
    • Si ocurre un error durante la generación de la cláusula WHERE, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Construcción de la condición de seguridad:

    • La función extrae la columna usuario_permitido_id del array $modelo_columnas_extra.
    • Combina la cláusula WHERE generada con una condición adicional que verifica que el usuario_permitido_id coincida con el usuario_id de la sesión actual.
  4. Retorno de la condición SQL final:

    • La función retorna una cadena que representa la cláusula WHERE final, incluyendo la condición de seguridad que verifica el acceso del usuario actual.

Ejemplos

$modelo_columnas_extra = [
    'usuario_permitido_id' => '(SELECT usuario_permitido_id FROM usuarios WHERE id = usuarios.id)'
];
$sql_where_previo = 'activo = 1';

$resultado = $this->asigna_seguridad_data($modelo_columnas_extra, $sql_where_previo);

// Resultado esperado:
// ' WHERE activo = 1 AND (SELECT usuario_permitido_id FROM usuarios WHERE id = usuarios.id) = $_SESSION[usuario_id]'
// Un array de error si ocurre algún problema.

Código de la Función

private function asigna_seguridad_data(array $modelo_columnas_extra, string $sql_where_previo): array|string
    {
        $valida = $this->valida_seguridad(modelo_columnas_extra: $modelo_columnas_extra);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al validar $modelo->columnas_extra', data:$valida);
        }

        $where = $this->where(sql_where_previo: $sql_where_previo);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al generar where', data: $where);
        }

        $sq_seg = $modelo_columnas_extra['usuario_permitido_id'];
        return " $where ($sq_seg) = $_SESSION[usuario_id] ";
    }