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()
를 해야한다.
'Django > Django Rest Framework' 카테고리의 다른 글
| 18. Django DRF permission_classes/admin, 사용자 별 권한 설정 (0) | 2022.06.20 |
|---|---|
| 17. Django DRF admin 페이지 심화 (0) | 2022.06.20 |
| 15. Django DRF serializer (0) | 2022.06.19 |
| 14. Django DRF dir (0) | 2022.06.19 |
| 13. Django DRF 역참조 (0) | 2022.06.19 |