2016-11-02 2 views
1

django rest 프레임 워크에서 권한이 거부 될 때마다 401을 클라이언트에 반환합니다.권한 변경 거부 HTTP 상태 코드

그러나 이것은 숨겨진 항목에 매우 좋지 않습니다. 401을 보내면 해당 사실을 인정하는 사용자가 있음을 알 수 있습니다.

대신 특정 사용 권한에서 404을 반환 할 수 있습니까? 예를 들어이 하나

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을 할 수 있습니다. 이 예기치 않은 아무것도 안

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 

DjangoObjectPermissions 때문에이 (다시 몇 단계) BasePermission을 확장 - 나는했습니다 : 그래서 그 대신 True 또는 False을 반환하는 모든 것이 좋은 경우, 당신은 True를 반환하고 그렇지 않으면 다음 Http404 인상 단지 404를 반환하는지 확인하기 위해 테스트되었지만이 컨텍스트 외부에서는 사용하지 않았습니다. 머리 하나만으로도 시험 할 수 있습니다.