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

권한 클래스 기본 개념
권한 클래스는 특정 요청에 대한 접근 허용 여부를 결정하는 역할을 하며, View 실행 전에 먼저 실행되어 사용자의 작업 수행 자격을 검사
모든 권한 클래스는 BasePermission을 상속받으며 두 가지 핵심 메서드를 제공:
has_permission: View 레벨 권한 검사has_object_permission: 객체 레벨 권한 검사
DRF 내장 권한 클래스
AllowAny
AllowAny누구에게나 접근을 허용하는 무제한 접근 권한
회원가입, 로그인 등 인증이 필요 없는 API에 사용
민감한 정보나 리소스를 다루는 View에는 사용 금지
IsAuthenticated
IsAuthenticated인증된 사용자에게만 접근을 허용
마이페이지 정보 조회/수정, 글쓰기 등 로그인 필수 기능에 사용
대부분의 API에서 기본 권한으로 활용
IsAdminUser
IsAdminUser관리자(
is_staff=True)인 사용자에게만 접근을 허용내부 관리용 대시보드 API, 전체 사용자 목록 조회 등에 사용
is_superuser가 아닌is_staff를 검사한다는 점에 유의
IsAuthenticatedOrReadOnly
IsAuthenticatedOrReadOnly비인증 사용자에게는 읽기 권한만 허용, 인증된 사용자에게는 모든 권한을 허용
안전한 메서드(
GET,HEAD,OPTIONS)는 항상 허용블로그나 커뮤니티에서 읽기는 공개, 쓰기는 회원 전용으로 구현할 때 유용
DjangoModelPermissions
DjangoModelPermissionsDjango의 기본 모델 권한과 연동하여 권한을 제어
사용자가 해당 모델에 대한
view,add,change,delete권한을 가지고 있는지 확인ViewSet에
queryset속성이 반드시 정의되어야 함
DjangoModelPermissionsOrAnonReadOnly
DjangoModelPermissionsOrAnonReadOnlyDjangoModelPermissions에 비인증 사용자 읽기 권한을 추가Django Admin 권한과 API 권한을 통합 관리하면서 공개 읽기가 필요한 경우 활용
권한 클래스 조합
여러 권한 클래스를 리스트로 조합 가능하며, 모든 권한을 통과해야 접근 허용(AND 조건)
OR 조건이 필요한 경우 비트 연산자(|)를 사용하여 새로운 권한 클래스 생성 가능
복잡한 조합보다는 요구사항을 명확히 설명하는 하나의 커스텀 권한 클래스 작성을 권장
Last updated
