fix queryset filtering by removing union() from user_allowed_peers

This commit is contained in:
Eduardo Silva
2026-03-10 13:48:09 -03:00
parent cd98be5b96
commit c4e43451c8

View File

@@ -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,22 +46,18 @@ 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):
"""Check if a given string is a valid IP address or hostname."""