Django REST frameworkのオブジェクトレベルのパーミッション設定の書き方について

前提

Django REST frameworkでオブジェクトレベルのパーミッションを設定したAPIを作成したいと思っています。現在、permission_classes = [IsAuthenticated] によりパーミッションを設定していますが、更に細かく、ユーザー毎に参照できるテーブルを制限したいと思っています。

実現したいこと

curl -X POST 'http://xxx.xxx.xxx.xxx/api/v1/auth/jwt/create/' -H "Content-Type: application/json" -d '{"username":"test001","password":"1234"}'

により、アクセストークンを取得し、

curl -X GET "http://xxx.xxx.xxx.xxx/api/v1/accounts/" -H "accept: application/json" -H "authorization: JWT {取得したアクセストークン}"

により、accountsテーブルのuser_id列が「test001」のみしか表示できないようにしたいです。

発生している問題・エラーメッセージ

現状は、上記コマンドを実行するとテーブルの全ての情報を取得できてしまいます。

該当のソースコード

views.py

from rest_framework import viewsets from rest_framework.permissions import IsAuthenticated from .permissions import IsOwner from .models import Accounts from .serializers import AccountsSerializer class AccountsViewSet(viewsets.ModelViewSet): queryset = Accounts.objects.all() serializer_class = AccountsSerializer permission_classes = [IsAuthenticated,IsOwner]

permissions.py

from rest_framework import permissions class IsOwner(permissions.BasePermission): def has_object_permission(self, request, view, obj): if obj.user_id == request.user: return True return False

user_id列が、認証されているユーザー名と同じ行のみTrueにする、と設定したいです。しかし、すべての行が表示されています。正しい書き方を教えていただきたいです。

▽追記
自分がしたいことはGET(一覧)に対するパーミッションですが、実際に書いていることはGET(詳細)に対する設定かもしれません。

コメントを投稿

0 コメント