2016-11-02 20 views
1

django restフレームワークでは、アクセス権が拒否されると、クライアントに401を返します。アクセス許可の拒否HTTPステータスコード

しかし、これは隠されたアイテムには非常に悪いことです。 401を送信することにより、ユーザーには実際には何かが存在することを認めます。

代わりに特定の権限で404を返すことができますか?これは例えば1:

class IsVisibleOrSecretKey(permissions.BasePermission): 
    """ 
    Owner can view no matter what, everyone else must specify secret_key if private 
    """ 
    def has_permission(self, request, view): 
     return True 

    def has_object_permission(self, request, view, obj): 
     key = request.query_params.get('secret_key') 
     return (
      obj.visibility != 'P' 
      or 
      request.user == obj.user 
      or 
      obj.secret_key == key 
     ) 

答えて

0

枠組みGitHubジャンゴ休憩中DjangoObjectPermissionsのオフに行く、あなたはraise an Http404をすることができます。だからではなく、TrueまたはFalseを返すのすべてが良好であれば、あなたはTrueを返却してからでない場合Http404を上げる:

from django.http import Http404 

class IsVisibleOrSecretKey(permissions.BasePermission): 
    """ 
    Owner can view no matter what, everyone else must specify secret_key if private 
    """ 
    def has_permission(self, request, view): 
     return True 

    def has_object_permission(self, request, view, obj): 
     key = request.query_params.get('secret_key') 
     if obj.visibility != 'P' or request.user == obj.user or obj.secret_key == key: 
      return True 
     else: 
      raise Http404 

DjangoObjectPermissionsBasePermission(いくつかのステップをバック)を拡張しているので、これは予想外の何かをすべきではない - 私はしました私はこのコンテキストの外でそれを使用していないが、それが404を返すことを確認するためだけにテストされています。ちょうど頭がテストをしています。

関連する問題