-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
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 메소드로 수정이 가능한데.. 코드상으론 잘못된부분이 없어보이네요 ㅠ
답변을 작성해보세요.
0
이진석
지식공유자2022.02.13
안녕하세요.
오타가 있으십니다. :-)
permission_classess 가 아니라 permission_classes 입니다. 오타로 인해, 퍼미션 설정이 현재 ViewSet에 적용이 되지 않았구요.
추가로 has_permission 로직에서 request.user_authenticated 오타가 있으십니다. 이는 request 객체에 없는 속성이므로 AttributeError 예외가 발생할 수 있습니다. 현재 로그인 유저는 request.user 이며, 현재 유저의 로그인 여부는 유저 객체의 is_authenticated 속성으로 알 수 있습니다. 그러므로 request.user.is_authenticated 로 쓰셔야 합니다.
화이팅입니다. :-)
답변 1