administrador.base.orm._where.genera_where_seguridad - gamboamartin/administrador GitHub Wiki

genera_where_seguridad

La función genera_where_seguridad es una función privada que genera una cláusula SQL WHERE con medidas de seguridad aplicadas. Esta función valida y genera la condición de seguridad utilizando métodos auxiliares, y luego integra esa condición en la cláusula WHERE existente del modelo.

Signatura


private function genera_where_seguridad(modelo $modelo, string $where): array|string

Parámetros

  • modelo $modelo:
    Una instancia de la clase modelo que representa el modelo de datos sobre el que se está trabajando. Este objeto contiene propiedades como aplica_seguridad y columnas_extra que determinan cómo se deben aplicar las medidas de seguridad en la consulta SQL.

  • string $where:
    Una cadena que representa la cláusula WHERE existente que se debe combinar con la condición de seguridad generada. Esta cláusula puede ser una parte previa de la consulta SQL que se está construyendo.

Retorno

  • array|string:
    Retorna una cadena que representa la cláusula WHERE actualizada con la condición de seguridad aplicada. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Generación de la condición de seguridad:

    • La función llama a seguridad() desde una instancia de params_sql para generar la condición de seguridad basada en las configuraciones del modelo (como aplica_seguridad y columnas_extra).
    • Si ocurre un error durante la generación de la condición de seguridad, se genera un mensaje de error y se retorna un array con el mensaje de error.
  2. Aplicación de la condición de seguridad en WHERE:

    • La función llama a where_seguridad() para integrar la condición de seguridad generada en la cláusula WHERE existente ($where).
    • Si ocurre un error durante este proceso, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Retorno de la cláusula WHERE actualizada:

    • La función retorna la cadena WHERE actualizada, que incluye la condición de seguridad aplicada, o la cadena original si no se aplicó seguridad.

Ejemplos

$modelo = new modelo();
$modelo->aplica_seguridad = true;
$modelo->columnas_extra = [
    'usuario_permitido_id' => '(SELECT usuario_permitido_id FROM usuarios WHERE id = usuarios.id)'
];
$where = 'activo = 1';

$resultado = $this->genera_where_seguridad($modelo, $where);

// Resultado esperado:
// Una cadena que representa la cláusula `WHERE` actualizada con la condición de seguridad aplicada.

Código de la Función

private function genera_where_seguridad(modelo $modelo, string $where): array|string
    {
        $seguridad = (new params_sql())->seguridad(aplica_seguridad:$modelo->aplica_seguridad,
            modelo_columnas_extra: $modelo->columnas_extra,
            sql_where_previo:  $where);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al generar sql de seguridad', data: $seguridad);
        }

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

        return $where;

    }