2017-01-05 53 views
2

我有一個視圖集API的樣本視圖集POST/api/samples/sample_id/check。我已經爲它定義了對象級別的權限。has_object_permission不針對自定義定義的API調用

class SamplePermission(BasePermission): 
    def has_object_permission(self, request, view, obj): 
     return True 

class SampleViewSet(viewsets.ModelViewSet): 
    permission_classes = (SamplePermission,) 

    @detail_route(methods=['post']) 
    def check(self, request, pk=None): 
     if pk: 
      print "check" 

功能has_object_permission是沒有得到調用時我調用API POST/api/samples/check。可能是什麼原因?

回答

1

權限不起作用,因爲方法check_object_permissions調用get_object函數。所以,你應該調用其功能之一,您check功能:

@detail_route(methods=['post']) 
    def check(self, request, pk=None): 
     obj = self.get_object() 
     .... 

或者你可以在detail_route

@detail_route(
    permission_classes=[SamplePermission], 
    methods=['post']) 
    def check(self, request, pk=None): 
     ... 
+0

編輯的問題,直接添加權限,按您的評論。該函數被調用GET GET api。它不適用於任何定製的API。 – linuxfreak

+0

@linuxfreak回答更新 –

+0

我直接在detail_route中添加了權限。我在Sample Permission中定義了has_permission和has_object_permission。 'has_permission'被調用,而'has_object_permission'不被調用。 – linuxfreak