2014-07-22 2 views
1

장고 Rest 프레임 워크 및 권한에 문제가 있습니다. DRF에서는 예를 들어 내 견해에 대해 두 가지 이상의 권한을 부여하지 않습니다.Django Rest Framework에서 두 가지 이상의 권한을 허용하지 않습니다.

class PermissionMixin(object): 
    permission_classes = (permissions.IsAdminUser, TokenHasReadWriteScope) 

관리자 사용자가 거부 : 나는 두 번째 권한 믹스 인을 추가하는 경우,

class PermissionMixin(object): 
    permission_classes = (permissions.IsAdminUser) 

지금 : 나는이 믹스 인을 사용하여 액세스 할 수 있습니다 관리자 사용자로 API에 로그인하면

접속하다. TokenHasReadWriteScope 사용자 만이 액세스 권한을 가질 수 있지만 관리자 권한 사용자와 토큰 액세스 권한이 모두 발생해야합니다.

다른 누구에게도이 문제가 있었습니까?

액세스 권한이있는 두 가지 유형의 사용자가 필요합니다.

이 내보기 모습입니다 :

class SomeList(PermissionMixin, generics.ListCreateAPIView) 

    queryset = Award.objects.all() 
    serializer_class = AwardSerializer 

PS TokenHasReadWriteScope는 발생하는 동작은 절대적으로 정상입니다 django-oauth-toolkit

+0

을 당신이 "oauth2_provider.ext.rest_framework 가져 오기 TokenHasReadWriteScope에서"한 가정?! 콘솔의 오류는 어떻게 생깁니 까? –

+0

@ wagner-felix 안녕하세요, 응답 해 주셔서 감사합니다. 예, 올바르게 가져 왔습니다. 전혀 오류가 없습니다. – Prometheus

답변

1

에서, 즉 DRF 설계된 방법입니다. 이러한 권한 클래스 중 적어도 하나를 갖고 싶다면보다 복잡한 '조건'을 지정해야합니다. This은 사용할 수있는 아주 좋은 예입니다. 당신이 그것을 설치 한 후 다음과 같이 사용할 수 있습니다 :

from rest_condition import Or 
... 
permission_classes = (Or(permissions.IsAdminUser, TokenHasReadWriteScope)) 
+0

나는 이것이 사실인지 전혀 몰랐다. 고맙습니다. 이 문서는 어디에 문서화되어 있습니까? – Prometheus

+0

rest_condition이 없습니다. 이 제품은 어디에서 가져온 것입니까? – Prometheus

+1

불행히도, 나는 그것이 어디에 문서화되어 있는지 모른다. 나는 개인적인 경험을 통해 DRF가 모든 권한 클래스를 특정 순서로 적용한다는 것을 안다. 그리고 내가 당신에게 준 링크는 당신처럼 문제가있을 때 발견 한 것입니다. 또 다른 가능한 해결책은 자신의 권한 클래스를 작성하는 것입니다.이 클래스에서 두 가지 권한 중 적어도 하나가 사실인지 확인합니다. – AdelaN

관련 문제