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áusulaWHEREprevia que se debe combinar con la condición de seguridad generada.
Retorno
array|string:
Retorna una cadena que representa la condición SQLWHEREgenerada, 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áusulaWHEREa 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_iddel array$modelo_columnas_extra. - Combina la cláusula
WHEREgenerada con una condición adicional que verifica que elusuario_permitido_idcoincida con elusuario_idde 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
WHEREfinal, 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] ";
}