TIL최종프로젝트(3) permission, is_admin, is_superuser
2023. 6. 8. 22:37ㆍTIL/2023.6월
2023.06.08 목
문제
관리자만, 행사 정보를 생성할 수 있게 하려고 permission을 주었지만, 잘 작동되지 않는 문제가 발생하였습니다.
class CustomPermission(permissions.BasePermission):
"""
읽기 권한은 비로그인, 로그인 일반 회원 모두에게 주어집니다.
생성, 수정, 삭제 권한은 오직 admin에게만 주어집니다.
권한이 없을 경우 "권한이 없습니다" 메시지와 함께 상태메시지 403 에러를 발생시킵니다.
"""
message = "권한이 없습니다"
def has_permission(self, request, view):
if request.method in permissions.SAFE_METHODS:
return True
else:
return request.user.is_superuser
시도
관리자와 일반 회원, 비회원을 구분하는 permission을 처음 작성해 보았기에 permission을 사용하여 구분하지 못한다고 생각하여 drf 공식문서를 찾아보았습니다.
IsAdminUser
Permissions - Django REST framework
www.django-rest-framework.org
IsAdminUser를 사용하여 admin에게만 권한을 부여할 수 있다는 것을 알게되었습니다.
하지만, 읽기 권한을 위해 IsAuthenticatedOrReadOnly와 함께 사용해보기위해 시도하였지만, 불가능했습니다.
해결
is_superuser을 is_admin으로 변경하였더니 잘 작동되었습니다.
db자체에 user가 저장될 때, is_superuser필드가 없고 is_admin만 존재한다는 것을 확인하였습니다.
class CustomPermission(permissions.BasePermission):
"""
읽기 권한은 비로그인, 로그인 일반 회원 모두에게 주어집니다.
생성, 수정, 삭제 권한은 오직 admin에게만 주어집니다.
권한이 없을 경우 "권한이 없습니다" 메시지와 함께 상태메시지 403 에러를 발생시킵니다.
"""
message = "권한이 없습니다"
def has_permission(self, request, view):
if request.method in permissions.SAFE_METHODS:
return True
else:
return request.user.is_admin
느낀점
이전에 request.user라고 사용해야하는 부분을 request.author로 사용하여 비슷한 문제가 발생했었던 일이 있었습니다.
조금만 더 생각했더라면, 쉽게 해결했을거고, 어쩌면, 문제를 만나지 않았을 수도 있습니다.
이런 부분에서 좀 더 유연한 사고가 필요하다 생각합니다.
'TIL > 2023.6월' 카테고리의 다른 글
TIL 최종프로젝트(5) 예매 생성, 조회 기능 (0) | 2023.06.12 |
---|---|
TIL 최종프로젝트(4) 공연예약모델 (0) | 2023.06.09 |
TIL 최종프로젝트(2) Invelid data. Expected a dictionary, but got list (0) | 2023.06.08 |
TIL 최종프로젝트(1) (0) | 2023.06.06 |
TIL docker 패스, 부족한 부분 보충 (0) | 2023.06.06 |