[Django] Permission Custom

GreenBean·2022년 4월 14일
0
post-thumbnail

Django

Permission Custom

  • 권한 없을 때 반환되는 메세지 커스텀
# 예시 코드
from rest_framework import (
    permissions,
    status as _status,
)
from rest_framework.exceptions import PermissionDenied


class TextUpatePermission(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        allowed_roles = set(['Decision Maker', 'Team Leader', 'Team Member'])
        
        # '결정권자'와 '팀 리더'는 텍스트 수정과 삭제 가능, 팀 멤버'는 자신의 텍스트만 수정과 삭제 가능
        if view.action == 'partial_update':
            work_id = request.data.get('work_id')
            project_id = Work.objects.get(id=work_id).project_id
           
            try:
                user_role = UserProjectRole.objects.get(
                                project_id=project_id,
                                user_id=request.user.id,
                                is_deleted=False,
                            ).role
            except UserProjectRole.DoesNotExist:
                user_role = None
            
            if user_role in allowed_roles:
                return True
            elif (user_role == 'Team Member') and (obj.user_id == request.user.id):
                return True
            
            raise PermissionDenied(
                {
                    "message": "텍스트를 변경할 수 있는 권한이 없습니다.",
                    "code": "TEXT_UPDATE_403_FORBIDDEN",
                    "status": _status.HTTP_403_FORBIDDEN,
                }
            )
            
        return True
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글