djangorestframeworkの権限設定に慣れようとしています。その一環として、私は、関数の応答に基づいてすべてのアクセス(読み取りアクセスを含む)を拒否し、それが拒否されることを確認するための概念実証を確立しようとしています。 (基本的には、関数が使用されると思われるときに関数が使用されることを確認しています)RetrieveAPIView
とListAPIView
が同じように設定されています。 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メソッドを使用しています。