前提
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 コメント