권한 설정 해보기
이번 포스팅에서는 로그인 한 유저만 페이지 및 데이터를 표시하게 끔 해보자.
이를 위해서는 권한을 체크하는 로직이 필요한데, rest framework
에서는 permissions
이라는 패키지를 따로 제공하고 있다.
권한 설정을 하고 싶은 View
파일로 들어가서 아래(## 권한설정 추가부분 ##
)와 같이 추가해준다.
아래의 예는 Post
데이터를 보여주는 PostViewSet
에서 설정하였다.
ex) view
파일 위치
/dashboard/dashboard_core/views.py
from rest_framework.permissions import IsAuthenticatedOrReadOnly
.
.
.
# Create your views here.
class PostViewSet(ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
## 권한설정 추가부분 ##
permission_classes = [IsAuthenticatedOrReadOnly]
## 권한설정 추가부분 ##
우리가 추가한 부분은 아래 한 줄인데, 해당하는 View
클래스에 적용하고 싶은 권한 로직이 구현되어 있는 클래스를 permission_classes
정의변수에 assign 한다.
permission_classes = [IsAuthenticatedOrReadOnly]
참고로 IsAuthenticatedOrReadOnly
는 이미 rest_framework.permissions
라이브러리에서 제공하는 권한로직들중 하나이다.
당연히, Overriding
도 가능하니 원하는 대로 커스터마이징 해서 쓰면 된다.
필자의 경우에는 GET
요청일 때도 로그인 한 유저만 보이도록 변경하였다.
변경파일: /venv/lib/python3.8/site-packages/rest_framework/permissions.py
SAFE_METHODS = ('HEAD', 'OPTIONS')
.
.
.
.
class IsAuthenticatedOrReadOnly(BasePermission):
"""
The request is authenticated as a user, or is a read-only request.
"""
def has_permission(self, request, view):
return bool(
request.method in SAFE_METHODS or
request.user and
request.user.is_authenticated
)
이제, 서버를 가동시켜서 로그인 하지 않은 경우와 로그인 한 경우에 각각, posts
데이터를 조회 (GET
요청) 해보자.
확인 url: http://127.0.0.1:8000/posts/
로그인 하지 않은 경우
아래 처럼 권한에러(HTTP RESPONSE CODE -> 403
) 가 발생하면서 데이터 로드에 실패했음을 알 수 있다.
로그인을 한 경우
아래 처럼 정상처리(HTTP RESPONSE CODE -> 200
) 된 데이터를 볼 수 있다.
이것으로 간단히 View
로직에 권한 설정을 하는 방법을 알아보았다.
Thank you!