Django REST Frameworkでviewにアクセス制限を設定する。

Django REST FrameworkでAPIを作成していると「このviewの操作は管理者以外は利用させたくない」という場面があります。

そこでviewにアクセスするユーザーの制限をかける設定を調べてみました。

アクセス制限(Permissions)の設定をする方法

APIのviewにアクセス制限をつける方法には、「Viewクラスごとに設定する方法」と「デフォルトのアクセス制限の設定を変える方法」の2つのパターンがあります。

デフォルトの設定をする

「settings.py」にあらかじめ下記コードを記載すると、デフォルトの設定ができます。viewにアクセス制限の設定がない場合(permission_classesの記載がない場合)は、この設定が適用されることになります。

# viewへのアクセス制限のデフォルト設定
REST_FRAMEWORK = {
	'DEFAULT_PERMISSION_CLASSES': [
		'rest_framework.permissions.IsAuthenticated',  # ←ここがデフォルトの設定になる
	],
}

Viewクラスごとに設定する

Viewクラスにアクセス制限を設定したい場合は、「permission_classes」に記載します。

from rest_framework.permissions import AllowAny
from rest_framework import generics
from .serializers import PostSerializer


class PostListView(generics.ListAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
    permission_classes = (AllowAny,)  # ←ここ

アクセス制限(Permissions)の種類

種類内容
AllowAny誰でも利用できる
IsAuthenticated認証済みのユーザーのみ利用できる
IsAdminUser管理者権限を持つユーザーのみ利用できる
IsAuthenticatedOrReadOnly認証済みのユーザーは利用できる
それ以外のユーザーは読み取りのみできる(GETなど)
DjangoModelPermissions※調べ中…
DjangoModelPermissionsOrAnonReadOnly※調べ中…
DjangoObjectPermissions※調べ中…

「DjangoModelPermissions」「DjangoModelPermissionsOrAnonReadOnly」「DjangoObjectPermissions」は、まだ把握できていないので今後調べて更新する予定です。

詳しく知りたい方はこちらの記事を参考にしてみてください。

コメントを残す

*