반응형
프로젝트를 진행하다보면, 특정 모델에 대한 권한을 제한하고 싶을 때가 있다. 이럴때 admin.ModelAdmin 클래스에서 제어할 수 있는 다양한 메서드를 제공한다.
Options
아래의 내용은 options에 들어 있는 메서드들의 내용이다.
has_add_permission
사용자가 새 객체를 추라할 수 있는 권한이 있는지 확인한다. 기본적으로 사용자가 해당 모델에 대해 add 권한을 가지고 있는지 검사한다.
def has_add_permission(self, request):
opts = self.opts
codename = get_permission_codename("add", opts)
return request.user.has_perm("%s.%s" % (opts.app_label, codename))
has_change_permission
객체를 변경할 수 있는 권한이 있는지 확인한다. 기본적으로 특정 객체에 대해 change 권한을 검사하지 않으며, 사용자가 해당 모델에 대해 변경 권한을 가지고 있는지 확인한다.
def has_change_permission(self, request, obj=None):
opts = self.opts
codename = get_permission_codename("change", opts)
return request.user.has_perm("%s.%s" % (opts.app_label, codename))
has_delete_permission
객체를 삭제할 수 있는 권한이 있는지 확인한다. 기본적으로 특정 객체에 대해 delete 권한을 검사하지 않으며, 사용자가 해당 모델에 대해 삭제 권한을 가지고 있는지 확인한다.
def has_delete_permission(self, request, obj=None):
opts = self.opts
codename = get_permission_codename("delete", opts)
return request.user.has_perm("%s.%s" % (opts.app_label, codename))
has_view_permission
객체를 조회할 수 있는 권한이 있는지 확인한다. 기본저긍로 특정 객체에 대한 view권한을 검사하지 않으며, 사용자가 해당 모델에 대해 조회 권한을 가지고 있는지 확인한다.
사용자가 change권한을 가지고 있으면 조회권한도 있다고 간주한다.
def has_view_permission(self, request, obj=None):
opts = self.opts
codename_view = get_permission_codename("view", opts)
codename_change = get_permission_codename("change", opts)
return request.user.has_perm(
"%s.%s" % (opts.app_label, codename_view)
) or request.user.has_perm("%s.%s" % (opts.app_label, codename_change))
Custom
앞선 메서드들을 오버라이드해서 커스터마이징해서 사용하면 된다. 예를 들어 delete 권한에 대해서 특정 객체에 대해 삭제 권한도 검사하도록 커스터마이징을 하기위해서는 아래처럼 코드를 작성할 수 있다.
def has_delete_permission(self, request, obj=None):
if obj is not None:
return request.user.has_perm('blog.delete_blogpost', obj)
return super().has_delete_permission(request)
반응형
'Django > DRF' 카테고리의 다른 글
[Django] 배포 시 에러 로그와 관리자 이메일 발송 (0) | 2024.08.07 |
---|---|
[DRF] nested serializer 사용 방법 (0) | 2024.07.03 |
[Django] Model Meta 설정 Permission을 이용한 사용자 접근 제한 (0) | 2024.07.03 |
[Django] Bulk Operations에 대해서 (0) | 2024.07.03 |
[Django] 모델 기본 필드 이해하기 (1) | 2024.06.18 |