2017-11-05 23 views
1

を必要としないようにDjangoの残りのフレームワークのビューセットでメソッドを設定します。このcreateメソッドは認証を必要としないとはどうして簡単に言えますか? トークンを使用して認証を実装した後で知っているように、すべてのリクエストのヘッダーにはTokenが含まれていて、必要のないリクエストでは403エラーが発生します。は、どのように私は以下のように<a href="http://www.django-rest-framework.org/api-guide/viewsets/" rel="nofollow noreferrer">viewset</a>を持っている認証

答えて

1

DRFの問題追跡ツールでは、this issueとなります。最も良い方法は、カスタムアクセス許可クラスを作成することです。ビューオブジェクトにはactionという属性があり、これを使用して、ViewSetの各サブアクションに応じて行う操作を変更できます。

class IsCreationOrIsAuthenticated(permissions.BasePermission): 

    def has_permission(self, request, view): 
     if not request.user.is_authenticated(): 
      if view.action == 'create': 
       return True 
      else: 
       return False 
     else: 
      return True 

又はAssembledAdam

からより詳細一方(リンクが壊れているか変更された場合のコードは、ちょうどリンクしないのSO方針に沿ってここにコピーされた。)

class AnonCreateAndUpdateOwnerOnly(permissions.BasePermission): 
    """ 
    Custom permission: 
     - allow anonymous POST 
     - allow authenticated GET and PUT on *own* record 
     - allow all actions for staff 
    """ 

    def has_permission(self, request, view): 
     return view.action == 'create' or request.user and request.user.is_authenticated 

    def has_object_permission(self, request, view, obj): 
     return view.action in ['retrieve', 'update', 'partial_update'] and obj.id == request.user.id or request.user.is_staff 

class ListAdminOnly(permissions.BasePermission): 
    """ 
    Custom permission to only allow access to lists for admins 
    """ 

    def has_permission(self, request, view): 
     return view.action != 'list' or request.user and request.user.is_staff 
関連する問題

 関連する問題