2017-02-08 11 views
0

djangorestframeworkの権限設定に慣れようとしています。その一環として、私は、関数の応答に基づいてすべてのアクセス(読み取りアクセスを含む)を拒否し、それが拒否されることを確認するための概念実証を確立しようとしています。 (基本的には、関数が使用されると思われるときに関数が使用されることを確認しています)RetrieveAPIViewListAPIViewが同じように設定されています。 Retrieveはアクセスを拒否しますが、Listはアクセスを許可しています。なぜ違いがあるのか​​把握しようとしています。Django REST - ListAPIViewへの読み取りアクセスを拒否する

# in views.py 
class TableList(generics.ListAPIView): 
    queryset = MyModel.objects.all() 
    serializer_class = MySerializer 
    permission_classes = (RejectAll,) 

class TableDetail(generics.RetrieveAPIView): 
    queryset = MyModel.objects.all() 
    serializer_class = MySerializer 
    permission_classes = (RejectAll,) 


# in permissions.py 
class RejectAll(permissions.BasePermission): 
    def has_object_permission(self, request, view, obj): 
     return False # for proof of concept -- this should always block all access? 


# in settings.py 
... 

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.IsAuthenticated', 
    ) 
} 


# in serializers.py 
class MySerializer(serializers.ModelSerializer): 
    class Meta: 
     model = SolarData 
     fields = (...) 

私はself.check_object_permissions(self.request, obj)を呼び出すget_object()メソッドを作成することができることを理解し、それはpermission_classesセットを持つことの目的を敗北ではないでしょうか?ジェネリック・ビューはそれ自身で同じチェックを実行するべきではありませんか?

編集/説明:私はもちろんGETメソッドを使用しています。

答えて

0

これを投稿した直後に回答が見つかりました。明らかに、私が使ったhas_object_permission()とは別に、has_permission()という機能もあります。したがってpermissions.pyは次のようになります。

# permissions.py 
class RejectAll(permissions.BasePermission): 
    def has_permission(self, request, view): 
     return False 

これは期待どおりです。

関連する問題