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

seguridad

La función seguridad es una función pública que gestiona la implementación de medidas de seguridad en una consulta SQL. Según el parámetro aplica_seguridad, la función valida y genera una cláusula SQL que garantiza que solo los datos permitidos para el usuario actual sean accesibles.

Signatura


final public function seguridad(bool $aplica_seguridad, array $modelo_columnas_extra, string $sql_where_previo): array|string

Parámetros

  • bool $aplica_seguridad:
    Un valor booleano que indica si se deben aplicar medidas de seguridad en la consulta SQL. Si es true, se validará y generará una cláusula SQL de seguridad; si es false, no se aplicará ninguna medida de seguridad.

  • array $modelo_columnas_extra:
    Un array que contiene las columnas adicionales del modelo, especialmente aquellas relacionadas 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, en caso de que aplica_seguridad sea true.

Retorno

  • array|string:
    Retorna una cadena que representa la cláusula SQL de seguridad generada. Si aplica_seguridad es false, retorna una cadena vacía. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Inicialización de la variable de seguridad:

    • La función inicializa la variable $seguridad como una cadena vacía, que se utilizará para almacenar la cláusula SQL de seguridad si aplica_seguridad es true.
  2. Verificación de la aplicación de seguridad:

    • Si aplica_seguridad es true, la función procede con los siguientes pasos para validar y generar la cláusula SQL de seguridad:
      • Validación de seguridad:
        • La función llama a valida_seguridad() para verificar que las columnas adicionales del modelo 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.
      • Generación de la cláusula SQL de seguridad:
        • La función llama a asigna_seguridad_data() para generar la cláusula SQL de seguridad basada en el usuario actual.
        • Si ocurre un error durante la generación de la cláusula SQL, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Retorno de la cláusula de seguridad:

    • La función retorna la cadena $seguridad, que contiene la cláusula SQL de seguridad generada o una cadena vacía si no se aplicó seguridad.

Ejemplos

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

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

// Resultado esperado:
// Una cadena que representa la cláusula SQL de seguridad generada.
// Un array de error si ocurre algún problema.

Código de la Función

final public function seguridad(bool $aplica_seguridad, array $modelo_columnas_extra,
                                    string $sql_where_previo): array|string
    {
        $seguridad = '';
        if($aplica_seguridad){

            $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);
            }

            $seguridad = $this->asigna_seguridad_data(modelo_columnas_extra:$modelo_columnas_extra,
                sql_where_previo: $sql_where_previo);
            if(errores::$error){
                return $this->error->error(mensaje: 'Error al generar sql de seguridad', data: $seguridad);
            }
        }
        return $seguridad;
    }