권한 관리는 요청자가 특정 리소스에 접근할 권한이 있는지 확인하는 과정이다. DRF에서는 permission모듈을 통해 권한 체크를 쉽게 구현할 수 있다.
기본 권한 체크 순서
Django의 권한 체크 순서는 인증, 권한체크, 쿼리셋 필터링으로 진행된다.
인증
가장 먼저 인증 단계에서, 사용자가 누구인지 확인하는 과정을 거친다. 주로 사용자가 로그인이 되어 있는지 또는 API 토큰을 사용하고 있는지와 같은 내용을 확인하는 과정이다.
예를 들어, 사용자가 API요청을 보낼 때, 헤더나 쿠키를 통해 사용자의 신원을 확인하게 된다. 이 단계는 기본적으로 누가 요청했는지를 식별하는 과정이다.
DRF의 인증 방식은 다양하게 있지만 대표적으로는 아래와 같이 이야기할 수 있다.
1. SessionAuthentication: Django의 세션을 이용한 인증 방식
2. TokenAuthentication: 사용자가 제공한 토큰을 통해 인증하는 방식
권한 체크
인증을 통해 사용자가 누구인지 확인했다면 이제 권한을 검사하는 단계이다. 권한 체크는 사용자가 특정 리소스에 접근할 수 있는 권한이 있는지 여부를 확인하는 과정이다.
DRF의 권한 체크의 기본 메서드는 아래와 같이 두가지를 통해서 이루어진다.
1. has_permissiom(self, request, view)
API뷰 전체에 대한 접근을 제어하는 역할을 하며, 주로 HTTP메서드 기반의 권한을 처리한다. 예를 들어, 사용자가 GET, POST, PUT, DELETE 요청을 보낼때 이 요청을 허용할지 결정한다.
2. has_object_permission(self, request, view, obj)
특정(개별) 객체에 대한 접근 권한을 제어하며, 객체 단위로 권한을 세분화할 수 있다. 예를 들어, 사용자가 자신의 계정 정보만 수정할 수 있도록 권한을 제한하는 경우 이 메서드를 통해 각 객체에 대한 권한 검증을 한다.
쿼리셋 필터링
권한 체크가 끝나고 나면, 사용자가 볼 수 있는 데이터에 대한 추가적인 제한을 가할 수 있는 단계이다. 사용자가 API를 통해 어떤 데이터에 접근할 수 있을지 결정하는 과정이다.
이 단계는 주로 get_queryset 메서드를 통해서 이루어진다. 예를 들어 사용자마다 볼 수 있는 데이터가 다를 경우, get_queryset 메서드에서 사용자의 정보를 기반으로 쿼리를 필터링 할 수 있다.
DRF의 기본 제공 권한 클래스
DRF는 기본적으로 여러 권한 클래스를 제공한다. rest_framework.permissions 모듈에 정의되어 있다.
1. AllowAny
- 모든 사용자가 접근 가능하게 하는 권한 클래스이다.
- 주로 권한이 필요없는 뷰에서 사용된다.
2. IsAuthenticated
- 인증된 사용자만 접근할 수 있게 하는 권한 클래스이다.
- 주로 로그인이 필요한 API에 사용된다.
3. IsAdminUser
- 관리자(슈퍼유저)만 접근할 수 있는 권한 클래스이다.
4. IsAuthenticatedOrReadOnly
- 인증된 사용자는 모든 요청을 할 수 있지만, 비 인증된 사용자는 GET요청만 할 수 있게 제한하는 권한 클래스이다.
5. DjangoModelPermissions
- Django의 모델별 권한을 사용하는 권한 클래스이다.
- 사용자가 add, change, delete, view 구너한을 가지고 있는지 검사한다.
6. DjangoObjectPermissions
- 객체 단위로 Djagno의 모델별 권한을 사용하는 클래스이다.
- DjangoModelPermissions과 비슷하지만, 개별 객체에 대한 권한까지 확인할 수 있다.
'BackEnd > Django, DRF' 카테고리의 다른 글
[Django] 읽기 전용 데이터베이스 설정 및 테스트 (0) | 2024.10.11 |
---|---|
[Django] 랜덤 객체를 가지고 오는 방법 (1) | 2024.09.13 |
[Django] 캐시 API (0) | 2024.08.21 |
[Django] 장고에서의 페이징 처리 (0) | 2024.08.12 |
[Django] 배포 시 에러 로그와 관리자 이메일 발송 (0) | 2024.08.07 |