я определила следующие моделиПроверьте разрешения на родственный объект в Django REST Framework
class Flight(models.Model):
...
class FlightUpdate(models.Model):
flight = models.ForeignKey('Flight', related_name='updates')
...
и следующий Viewset с помощью NestedViewsetMixin
в REST Framework Extensions
class FlightUpdateViewSet(mixins.ListModelMixin,
mixins.CreateModelMixin,
NestedViewSetMixin,
viewsets.GenericViewSet):
"""
API Endpoint for Flight Updates
"""
queryset = FlightUpdate.objects.all()
serializer_class = FlightUpdateSerializer
def create(self, request, *args, **kwargs):
flight = Flight.objects.get(pk=self.get_parents_query_dict()['flight'])
...
Так, чтобы получить доступ к FlightUpdates
, связанный с Flight
, URL-адресом является /flights/1/updates/
.
Я хочу, чтобы гарантировать, что люди могут только создатьFlightUpdates
, если у них есть права доступа к изменениямFlight
объекта, с которым FlightUpdate
связан.
Как я могу выполнить дополнительную проверку при добавлении FlightUpdate
? Я попытался добавить что-то вроде этого в viewet, но я не уверен, что это лучший способ.
if not request.user.has_perm('flights.change_flight', flight):
raise PermissionError()
Примечание: Я использую django-rules
для реализации прав доступа на уровне объектов.