본문 바로가기
Django/Django Rest Framework

16. Django DRF permission_classes를 활용한 접근 권한 설정

by S.T.Lee 2022. 6. 19.

view에 접근 할 수 있는 요청을 drf의 permission_classes를 활용해 관리 할 수 있다.

  • permissions.AllowAny : 모든 사용자를 대상으로 접근 허용
  • permissions.IsAuthenticated : 로그인 된 사용자를 대상으로 접근 허용
  • permissions.AllowAny : 모든 사용자를 대상으로 접근 허용
  • 이외에도 다양한 permission class들이 존재

 

Custom permission 만들기

보통 permission의 경우 하나의 app에서 사용하는게 아닌 프로젝트 전체에서 사용되는 경우가 많아서 프로젝트 app에서 permissions.py를 만들어준다.

그리고 기존 permissions.py에서 마음에 드는거 아무거나 가져와서 붙여주고 views.py에 import 해주면 전부다.

#permissions.py
from rest_framework.permissions import BasePermission

class CustomPermission(BasePermission):
    def has_permission(self, request, view):
        return True
#don't know/views.py
from ai.permissions import CustomPermission
class UserView(APIView):
    permission_classes = [CustomPermission]

끝!

 

가입된지 특정 기간 이상이 된 유저에게만 권한 주기

from rest_framework.permissions import BasePermission
from datetime import datetime, timedelta

class RegistedMoreThanAWeekUser(BasePermission):
    def has_permission(self, request, view):
        user = request.user
        if not request.user or not request.user.is_authenticated:
            return False
        return bool(user.join_date < (datetime.now().date() - timedelta(days=7)))
#views.py
from ai.permissions import RegistedMoreThanAWeekUser as RM
class UserView(APIView):
    permission_classes = [RM]
    def get(self, request):
        user = request.user
        return Response(UserSerializer(user).data)

가입된지 하루된 아이디임으로 하단과 같은 결과가 나온다.

 

만약 DateTimeFields와 비교를 하면

from django.utils import timezone
user.join_date > timezone.now()

를 해야한다.