27 lines
931 B
Python
27 lines
931 B
Python
from __future__ import annotations
|
|
|
|
from django.db.models import Q
|
|
from django.utils import timezone
|
|
from guardian.shortcuts import assign_perm, remove_perm
|
|
|
|
from .models import AccessRequest
|
|
|
|
|
|
def sync_server_view_perm(access_request: AccessRequest) -> None:
|
|
if not access_request or not access_request.requester_id or not access_request.server_id:
|
|
return
|
|
now = timezone.now()
|
|
has_valid_access = (
|
|
AccessRequest.objects.filter(
|
|
requester_id=access_request.requester_id,
|
|
server_id=access_request.server_id,
|
|
status=AccessRequest.Status.APPROVED,
|
|
)
|
|
.filter(Q(expires_at__isnull=True) | Q(expires_at__gt=now))
|
|
.exists()
|
|
)
|
|
if has_valid_access:
|
|
assign_perm("servers.view_server", access_request.requester, access_request.server)
|
|
return
|
|
remove_perm("servers.view_server", access_request.requester, access_request.server)
|