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

where_seguridad

La función where_seguridad es una función privada que construye y aplica una cláusula SQL WHERE o AND basada en la seguridad del modelo. Si la seguridad está habilitada para el modelo, la función añade la condición de seguridad a la cláusula WHERE existente o la inicia si aún no está presente.

Signatura


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

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 la propiedad aplica_seguridad que indica si se deben aplicar medidas de seguridad en la consulta SQL.

  • string $seguridad:
    Una cadena que representa la condición de seguridad que debe ser aplicada a la cláusula WHERE. Esta condición asegura que la consulta SQL solo muestre datos permitidos para el usuario actual.

  • string $where:
    Una cadena que representa la cláusula WHERE existente. Si la condición de seguridad se debe aplicar, esta cadena se actualizará para incluir la seguridad; de lo contrario, permanecerá sin cambios.

Retorno

  • string|array:
    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. Verificación de la aplicación de seguridad:

    • La función verifica si la propiedad aplica_seguridad del modelo es true. Si lo es, la función procede a aplicar la condición de seguridad.
  2. Validación de la condición de seguridad:

    • La función limpia la cadena seguridad utilizando trim() para eliminar espacios en blanco al inicio y al final.
    • Si la cadena seguridad está vacía después de la limpieza, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Construcción de la cláusula WHERE:

    • La función limpia la cadena where utilizando trim().
    • Si where está vacía, se inicia la cláusula con WHERE seguido de la condición de seguridad.
    • Si where ya contiene una condición, se añade la condición de seguridad utilizando AND.
  4. 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;
$seguridad = '(usuario_id = $_SESSION[usuario_id])';
$where = 'activo = 1';

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

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

Código de la Función

private function where_seguridad(modelo $modelo, string $seguridad, string $where): string|array
    {
        if($modelo->aplica_seguridad){
            $seguridad = trim($seguridad);
            if($seguridad === ''){
                return $this->error->error(mensaje: 'Error seguridad esta vacia',data:  $seguridad, es_final: true);
            }
            $where = trim($where);
            if($where === ''){
                $where .= " WHERE $seguridad ";
            }
            else{
                $where .= " AND $seguridad ";
            }
            $where = " $where ";
        }
        return $where;
    }