[Series1. DashBoard 만들기] - 17. 페이지 권한 설정

django_apps·2021년 11월 5일
1

django apps

목록 보기
17/17
post-thumbnail

권한 설정 해보기

이번 포스팅에서는 로그인 한 유저만 페이지 및 데이터를 표시하게 끔 해보자.

이를 위해서는 권한을 체크하는 로직이 필요한데, 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!

profile
django developer

0개의 댓글