장고 미삭 프레임워크입니다 권한을 별도로 당 방법 -

나는 내가 혹시 API 를 쓰는 방법을 사용하여 클래스를 사용할 때 경우 장고 미삭 프레임워크입니다 권한만으로 기반 뷰 당 지정할 수 있습니다.

[판독값 문서] [1] 내가 보고 매우 쉽게 수행할 수 있는 기반 뷰 기능을 사용하여 쓰는 경우, 그냥 "@permission_classes" 보호하려는 권한을 가진 뷰 기능을 통해 디자이너이다. 하지만, 제가 할 수 있는 방법을 사용할 때, t 지켜보리니 don& # 39 와 같은 사브스 "아피비에프" class "permission_classes" 에 대한 사용 권한을 전체 클래스, 속성 때문에 그 때 나는 대체하십시오 적용될 수 있는, 그러나 그 모든 계급의 서버리스 ("get", "포스트", "동일팔레트에.").

그래서, 이 또한 각 API 를 보기 위해 할 수 있는 다른 방법을 기록되었으므로 사브스 대체하십시오 권한만으로 보기입니다 클래스용?

[1]: # 사용 권한을 설정 정책 https://www.django-rest-framework.org/api-guide/permissions/

질문에 대한 의견 (1)

39, ve 전반에서 i& 비슷한 문제를 안고 있기 때문에, 나는 아주 복잡한 논리를 권한만으로 CBV& 사용할 때 # 39 의 요청에 따라 메서드입니다.

& # 39 는 내가 지었지 타사 솔루션을 사용하려면 rest_condition& # 39;; app 이 페이지 하단에 나열되었습니다.

http://www.django-rest-framework.org/api-guide/permissions

https://github.com/caxap/rest_condition

그냥 권한만으로 흐름에 따라 실행될 수 있도록 각 지점에서 분할합니다 논리를 reques 메서드입니다.

from rest_condition import And, Or, Not

class MyClassBasedView(APIView):

    permission_classes = [Or(And(IsReadOnlyRequest, IsAllowedRetrieveThis, IsAllowedRetrieveThat),
                             And(IsPostRequest, IsAllowedToCreateThis, ...),
                             And(IsPutPatchRequest, ...),
                             And(IsDeleteRequest, ...)]

따라서 & # 39 Or& # 39;; 요청을 할 수 있는 권한의 분기로의 결합할지 실행하십시오 And& # 39, & # 39 따라 방법 및. 둘러싸여집니다 권한을 부여할 수 있는 권한을 위한 방법, 즉 모든 요청을 받아들여 관련된 통과해야 한다. # 39, & # 39, & # 39, 함께 사용할 수도 있습니다 Or& And& # 39;; # 39, & # 39 와 Not&. 각각의 흐름은 복잡해지고 권한만으로 만들 수 있습니다.

단순히 실행하십시오 분기로의 다음과 같이, 각 클래스 사용 권한

class IsReadyOnlyRequest(permissions.BasePermission):

    def has_permission(self, request, view):
        return request.method in permissions.SAFE_METHODS

class IsPostRequest(permissions.BasePermission):

    def has_permission(self, request, view):
        return request.method == "POST"

... #You get the idea
해설 (0)
해결책

권한은 볼 수 있지만 측면을 고려하여 클래스 전체에 적용된 요청 (같은 방법 등 GET 또는 POST) 에 대한 승인 결정을 내렸다.

예를 들어, '' 이사우스렌티카테도로도널리 내장현 볼

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
해설 (2)

내가 정말 하고 싶은 '를 이 문제와 실행했음 @permission_classes 표시할 수 있는 방법을 사용하여 특정 권한을 일부 사용자 정의 보기입니다' 디자이너이다. 내가 가진 믹스인 됐지 coming up:

class PermissionsPerMethodMixin(object):
    def get_permissions(self):
        """
        Allows overriding default permissions with @permission_classes
        """
        view = getattr(self, self.action)
        if hasattr(view, 'permission_classes'):
            return [permission_class() for permission_class in view.permission_classes]
        return super().get_permissions()

예를 들어 览侩 荤례:

from rest_framework.decorators import action, permission_classes  # other imports elided

class MyViewset(PermissionsPerMethodMixin, viewsets.ModelViewSet):
    permission_classes = (IsAuthenticatedOrReadOnly,)  # used for default ViewSet endpoints
    queryset = MyModel.objects.all()
    serializer_class = MySerializer

    @action(detail=False, methods=['get'])
    @permission_classes((IsAuthenticated,))  # overrides IsAuthenticatedOrReadOnly
    def search(self, request):
        return do_search(request)  # ...
해설 (1)

이것은 오래된 질문 하지만 난 그러니까말이야 최근 꽂으십시오 실행했음 동일한 문제가 및 나누고 싶었던 내 솔루션 (이후 수락됨 wasn& 오토메이티드 # 39, t 꽤 내가 필요). # 39 의 @gdorn& 오토메이티드 put me on right track, 하지만 수행됨 프리스트 슬픔으로창백해지고 셀프스카션 '의' 만 '

39 이 내 스스로 해결할 만들기, ve i& 디자이너이다.

"'파이썬 데프 method_permission_classes (클래스): 데프 데코레이터 (func): 데프 decorated_func (자체, , 콰리스 args): self.permission_classes = 클래스뿐만 반품하십시오 func (자체, , 콰리스 args) decorated_func 반품하십시오. 데코레이터 반품하십시오. "'

'대신' permission_classes 설정 기능, 같은 속성을 설정하고 권한이 있는 내 데코레이터 둘러싸여집니다 내장현 데코레이터 크기:, 통화 중인 클래스뿐만 보기 인스턴스입니다 불렀으매. 이렇게 하면 보통 ',' t need get_permissions () 는 모든 변경, 그 이후 doesn& # 39 에 'self.permission_classes 단순히'.

예 览侩 荤례:

"'파이썬 rest_framework 가져오기의 에서 보기, 사용 권한

클래스 미비에프 (비에프스트라피비에프):

사용되는 기본 아피비에프 엔드포인트에 permission_classes = (페르미시언스트리사우스렌티카테도로도널리)

크리스트 = 미모델드로비치s.얼 () 미즈리얼리처 serializer_class =

오버라이드가 이사우스렌티카테도로도널리 @method_permission_classes (페르미시언스트리사데미노저))

데프 삭제하시겠습니까 (자체, 요청, id):

인스턴스입니다 = self.get_object ().

"'

따라서 누군가가 희망을 호스팅하면서 꽂으십시오 동일한 문제가!

해설 (0)