2015-03-30 3 views
7

Jak mogę zastosować tylko klasę uprawnień do trasy szczegółowej?Używanie klasy uprawnień na trasie szczegółowej

class EventViewSet(viewsets.ModelViewSet): 

    @detail_route(methods=['post']) 
    def messages(self, request, pk=None): 
     ### Check a permissions class. 
     ... 
+0

hej Mam pytanie. w tym scenariuszu adres URL tej metody będzie/Events/messages? i możesz POST na to? a także, czy musi wziąć samo, prośbę i pk = Brak? –

+0

Adres URL tej metody będzie miał postać '/ {prefix}/{id}/messages'. I tak, możesz POST na to. Dokumenty DRF są naprawdę niesamowite. Przeczytanie [przewodnika po interfejsie API] (http://www.django-rest-framework.org/api-guide/routers/) dokładnie da ci wszystkie potrzebne informacje. – yndolok

Odpowiedz

13

Możesz dodać uprawnienia w zasadzie w ten sposób:

class EventViewSet(viewsets.ModelViewSet): 
    @detail_route(
     permission_classes=[ 
      permissions.PermissionClass_], 
     methods=['post']) 
    def messages(self, request, pk=None): 
     ### Check a permissions class. 
     ... 
0

Jeśli masz problem z permissions_classes w swoich działań niestandardowych w ViewSet, spróbuj użyć tego dekorator na działania. Prawdopodobnie najnowszy Django Rest Framework nie patrzy na uprawnienia. Rozwiązaniem dla tej sytuacji jest sprawdzenie go samodzielnie na początku każdej niestandardowej akcji lub użycie następującego dekoratora:

def check_permissions(fun): 
    def ref(self, request, pk=None): 
     obj = get_object_or_404(self.get_queryset(), pk=pk) 
     self.check_object_permissions(self.request, obj) 

     return fun(self, request, pk) 

    return ref