2017-01-05 6 views
2

APIのビューセットSampleViewSetがPOST/api/samples/sample_id/checkです。私はオブジェクトレベルの権限を定義しています。カスタム定義のAPIに対してhas_object_permissionが呼び出されていません

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" 

私はAPI POST/api/samples/checkを呼び出すときに、関数が呼び出さhas_object_permission取得されていません。理由は何でしょうか?

答えて

1

check_object_permissionsのメソッドはget_objectの関数で呼び出されるため、許可されていません。

@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

編集に直接質問を許可を追加することができます。つまり、あなたのcheck関数内でその関数のいずれかを呼び出す必要があります。この関数はGET apiのために呼び出されます。カスタム定義のAPIでは機能しません。 – linuxfreak

+0

@linuxfreak回答 –

+0

detail_routeに直接アクセス許可を追加しました。私は、サンプル許可内にhas_permissionとhas_object_permissionの両方を定義しています。 'has_object_permission'は呼び出されませんが、 'has_permission'は呼び出されます。 – linuxfreak

関連する問題