DRF 기본 제공 권한 클래스 파헤치기

DRF에서 제공하는 기본 권한 클래스들을 활용해 API 접근 권한을 효과적으로 제어하는 방법

권한 클래스 기본 개념

권한 클래스는 특정 요청에 대한 접근 허용 여부를 결정하는 역할을 하며, View 실행 전에 먼저 실행되어 사용자의 작업 수행 자격을 검사

모든 권한 클래스는 BasePermission을 상속받으며 두 가지 핵심 메서드를 제공:

  • has_permission: View 레벨 권한 검사

  • has_object_permission: 객체 레벨 권한 검사

DRF 내장 권한 클래스

AllowAny

  • 누구에게나 접근을 허용하는 무제한 접근 권한

  • 회원가입, 로그인 등 인증이 필요 없는 API에 사용

  • 민감한 정보나 리소스를 다루는 View에는 사용 금지

IsAuthenticated

  • 인증된 사용자에게만 접근을 허용

  • 마이페이지 정보 조회/수정, 글쓰기 등 로그인 필수 기능에 사용

  • 대부분의 API에서 기본 권한으로 활용

IsAdminUser

  • 관리자(is_staff=True)인 사용자에게만 접근을 허용

  • 내부 관리용 대시보드 API, 전체 사용자 목록 조회 등에 사용

  • is_superuser가 아닌 is_staff를 검사한다는 점에 유의

IsAuthenticatedOrReadOnly

  • 비인증 사용자에게는 읽기 권한만 허용, 인증된 사용자에게는 모든 권한을 허용

  • 안전한 메서드(GET, HEAD, OPTIONS)는 항상 허용

  • 블로그나 커뮤니티에서 읽기는 공개, 쓰기는 회원 전용으로 구현할 때 유용

DjangoModelPermissions

  • Django의 기본 모델 권한과 연동하여 권한을 제어

  • 사용자가 해당 모델에 대한 view, add, change, delete 권한을 가지고 있는지 확인

  • ViewSet에 queryset 속성이 반드시 정의되어야 함

DjangoModelPermissionsOrAnonReadOnly

  • DjangoModelPermissions에 비인증 사용자 읽기 권한을 추가

  • Django Admin 권한과 API 권한을 통합 관리하면서 공개 읽기가 필요한 경우 활용

권한 클래스 조합

여러 권한 클래스를 리스트로 조합 가능하며, 모든 권한을 통과해야 접근 허용(AND 조건)

OR 조건이 필요한 경우 비트 연산자(|)를 사용하여 새로운 권한 클래스 생성 가능

복잡한 조합보다는 요구사항을 명확히 설명하는 하나의 커스텀 권한 클래스 작성을 권장

Last updated