django rest フレームワーク ビューで django ガーディアンを使用してカスタム アクセス許可を設定したいと考えています。では成功しましたが、 では達成RetrieveModelMixin
できませんでしたListModelMixin
。
次のようなアクセス許可クラスがあります。
class CustomPerm(permissions.BasePermission):
def has_permission(self, request, view):
return request.user and request.user.is_authenticated()
def has_object_permission(self, request, view, object):
if request.method == 'GET':
if object.public is True:
return True
if object.user.is_staff is True:
return True
if 'read_object' in get_perms(request.user, object):
return True
return False
if request.method == 'POST':
#...
ここでもビューを簡略化しました:
@authentication_classes((TokenAuthentication, SessionAuthentication, BasicAuthentication,))
@permission_classes((CustomPerm,))
class ObjectView(ListModelMixin,
RetrieveModelMixin,
viewsets.GenericViewSet):
queryset = myObject.objects.all()
serializer_class = ObjectSerializer
私が素朴に期待していた動作: CustomPermルールListModelMixin
に従って、オブジェクト自体をフィルタリングできます。has_object_permission
しかし、それはそのようには機能しません。メソッドを作成し、独自のパーミッション ルールを適用することで、やりたいことを実行できget_queryset
ますが、不適切でひどいものに思えます。
より良い方法はありますか?ありがとう :)
PS: 私は何かが欠けていると確信しており、私の質問は素朴ですが、何がわかりません。