Coverage for website/events/api/v2/admin/permissions.py: 28.57%
20 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from django.db.models import QuerySet
3from rest_framework.generics import get_object_or_404
4from rest_framework.permissions import BasePermission
6from events.models import Event, EventRegistration
7from events.services import is_organiser
10class IsOrganiser(BasePermission):
11 def has_permission(self, request, view):
12 event_lookup_field = (
13 view.event_lookup_field if hasattr(view, "event_lookup_field") else "pk"
14 )
15 if event_lookup_field in view.kwargs:
16 obj = get_object_or_404(Event, pk=view.kwargs.get(event_lookup_field))
17 return is_organiser(request.member, obj)
18 return super().has_permission(request, view)
20 def has_object_permission(self, request, view, obj):
21 if isinstance(obj, QuerySet):
22 return True
23 if not request.member:
24 return False
25 if isinstance(obj, EventRegistration):
26 obj = obj.event
27 return is_organiser(request.member, obj)