Python and Data

Permission class와 커스터마이징

hakunamatata99 2025. 6. 19. 20:33

Django에서 사용할 수 있는 permissions 와 상속받아서 커스터마이징하는 방법 정리

 

0. Permission의 이유

로그인 한 사용자만 게시글을 작성할 수 있다던가

모두가 글을 작성할 수 있다던가

관리자만 글을 삭제할 수 있다던가... 

 

작성한 사용자만 게시글을 볼 수 있다던가...

 

1. DRF Built-in permission class

AllowAny 모두 허용(인증같은거 필요 없음)
IsAuthenticated 인증된 사용자만 접근 가능
IsAdminUser user_customuser의 is_staff=True인 사용자만 접근 가능
IsAuthenticatedOrReadOnly 인증된 사용자는 쓰기 가능, 비인증 사용자는 읽기만 가능
DjangoModelPermissions Model에서 만든 권한에 따라
DjangoModelPermissionsOrAnonReadOnly Model에서 만든 권한에 따라서 인증 없으면 읽기만

 

 

2. permission class Customizing

=> permissions.py 파일을 작성한다.

from rest_framework import permissions

 

class IsOwnerOrAdmin(permissions.BasePermission): #BasePermission 상속
    def has_object_permission(self, request, view, obj):
        return obj.user == request.user or request.user.is_staff

#object의 user와 요청한 user가 같거나/is_staff가 True인 경우 

 

3. permission은 어디에 붙이는가

=> Views.py에

 

A.Class based views(CBV)인 경우


class SuggestionDeleteView(generics.DestroyAPIView):
    queryset = Suggestion.objects.all()
    serializer_class = SuggestionSerializer
    permission_classes = [permissions.IsAuthenticated, IsOwnerOrAdmin] #permission_classes를 이렇게 정하거나

 

B.Function based views

@api_view(['DELETE'])
@permission_classes([permissions.IsAuthenticated, IsOwnerOrAdmin]) #데코레이터로 처리