• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

IsAuthorOrReadOnly 퍼미션이 작동이 안되네요

22.02.13 16:57 작성 조회수 142

0

views.py

class PostViewSet(ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
    permission_classess = [IsAuthenticated,IsAuthorOrReadOnly] # login_required

 

permissions.py

class IsAuthorOrReadOnly(permissions.BasePermission):
    #인증이 되어야만 목록조회/포스팅 등록 허용
    def has_permission(self, request, view):
        return request.user and request.user_authenticated

    # 작성자 아니면 조회만 가능, 작성자는 다른 작업도 가능
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS: # SAFE_METHOD는 GET, HEAD 등 조회용 안전한 메소드
            return True

        if request.method == 'DELETE':
            return request.user.is_superuser
           
        return obj.author == request.user

 

다른 유저가 쓴 글도  PATCH 메소드로 수정이 가능한데.. 코드상으론 잘못된부분이 없어보이네요 ㅠ

답변 1

답변을 작성해보세요.

0

안녕하세요.

오타가 있으십니다. :-)

permission_classess 가 아니라 permission_classes 입니다. 오타로 인해, 퍼미션 설정이 현재 ViewSet에 적용이 되지 않았구요.

추가로 has_permission 로직에서 request.user_authenticated 오타가 있으십니다. 이는 request 객체에 없는 속성이므로 AttributeError 예외가 발생할 수 있습니다. 현재 로그인 유저는 request.user 이며, 현재 유저의 로그인 여부는 유저 객체의 is_authenticated 속성으로 알 수 있습니다. 그러므로 request.user.is_authenticated 로 쓰셔야 합니다.

화이팅입니다. :-)