mirror of
https://github.com/eduardogsilva/wireguard_webadmin.git
synced 2026-03-15 13:36:18 +00:00
fix queryset filtering by removing union() from user_allowed_peers
This commit is contained in:
@@ -8,7 +8,7 @@ from email.mime.text import MIMEText
|
|||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.validators import validate_email
|
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 django.utils import timezone
|
||||||
|
|
||||||
from user_manager.models import UserAcl
|
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):
|
def user_allowed_peers(user_acl: UserAcl, instance: WireGuardInstance):
|
||||||
|
base_qs = Peer.objects.filter(wireguard_instance=instance)
|
||||||
|
|
||||||
if not user_acl.peer_groups.exists():
|
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(
|
return (
|
||||||
wireguard_instance=instance,
|
base_qs.filter(
|
||||||
peergroup__in=user_acl.peer_groups.all()
|
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):
|
def is_valid_ip_or_hostname(value):
|
||||||
"""Check if a given string is a valid IP address or hostname."""
|
"""Check if a given string is a valid IP address or hostname."""
|
||||||
|
|||||||
Reference in New Issue
Block a user