From c4e43451c8c8390fbe4e9b6fe94048d7ffc9a51c Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Tue, 10 Mar 2026 13:48:09 -0300 Subject: [PATCH] fix queryset filtering by removing union() from user_allowed_peers --- wgwadmlibrary/tools.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/wgwadmlibrary/tools.py b/wgwadmlibrary/tools.py index ca3bcdf..75015fb 100644 --- a/wgwadmlibrary/tools.py +++ b/wgwadmlibrary/tools.py @@ -8,7 +8,7 @@ from email.mime.text import MIMEText from django.core.exceptions import ValidationError from django.core.validators import validate_email -from django.db.models import Max +from django.db.models import Max, Q from django.utils import timezone from user_manager.models import UserAcl @@ -46,21 +46,17 @@ def user_allowed_instances(user_acl: UserAcl): def user_allowed_peers(user_acl: UserAcl, instance: WireGuardInstance): + base_qs = Peer.objects.filter(wireguard_instance=instance) if not user_acl.peer_groups.exists(): - return Peer.objects.filter(wireguard_instance=instance).order_by('sort_order') + return base_qs.order_by('sort_order') - peers_from_direct = Peer.objects.filter( - wireguard_instance=instance, - peergroup__in=user_acl.peer_groups.all() + return ( + base_qs.filter( + Q(peergroup__in=user_acl.peer_groups.all()) | + Q(wireguard_instance__peergroup__in=user_acl.peer_groups.filter(server_instance=instance)) + ).distinct().order_by('sort_order') ) - - peers_from_instance = Peer.objects.filter( - wireguard_instance=instance, - wireguard_instance__peergroup__in=user_acl.peer_groups.filter(server_instance=instance) - ) - - return peers_from_direct.union(peers_from_instance).order_by('sort_order') def is_valid_ip_or_hostname(value):