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 columnausuario_permitido_id
. -
string $sql_where_previo
:
Una cadena que representa la cláusulaWHERE
previa que se debe combinar con la condición de seguridad generada.
Retorno
array|string
:
Retorna una cadena que representa la condición SQLWHERE
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
-
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.
- La función llama a
-
Generación de la cláusula
WHERE
:- La función llama a
where()
para generar la cláusulaWHERE
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.
- La función llama a
-
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 elusuario_permitido_id
coincida con elusuario_id
de la sesión actual.
- La función extrae la columna
-
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.
- La función retorna una cadena que representa la cláusula
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] ";
}