1. ホーム
  2. python

Django REST フレームワーク - メソッドごとにパーミッションが分かれる

2023-10-26 09:48:58

質問

Django REST Frameworkを使ってAPIを書いているのですが、クラスベースのビューを使うときに、メソッドごとにパーミッションを指定できるのかどうか気になります。

ドキュメントを読む 関数ベースのビューを書くのであれば、非常に簡単であることがわかります。 @permission_classes デコレータを使うだけです。しかし、CBVを使うときに同じことをする方法が APIView クラスで CBV を使う場合、同じことをする方法が見当たりません。 permission_classes 属性でクラス全体のパーミッションを指定しますが、 それはすべてのクラスメソッドに適用されるからです ( get , post , put ...).

では、APIビューをCBVで記述させ、さらにビュークラスのメソッドごとに異なるパーミッションを指定することは可能なのでしょうか?

どうすれば解決するのでしょうか?

パーミッションはViewクラス全体に適用されますが、リクエストの側面(GETやPOSTなどのメソッドなど)を考慮して認可を決定することができます。

組み込みの IsAuthenticatedOrReadOnly を例として見てください。

SAFE_METHODS = ['GET', 'HEAD', 'OPTIONS']

class IsAuthenticatedOrReadOnly(BasePermission):
    """
    The request is authenticated as a user, or is a read-only request.
    """

    def has_permission(self, request, view):
        if (request.method in SAFE_METHODS or
            request.user and
            request.user.is_authenticated()):
            return True
        return False