포스트

[Recipe: Remake] Permission

CustomPermission

settings.py가 속한 폴더에 permissions.py를 생성한다.
레시피 뿐만 아니라 이후에 추가할 레시피 리뷰, 게시판 글/댓글 또한 POST일 때에는 인증된 회원만, 수정/삭제는 작성자 또는 관리자만 가능하게 구현할 것이므로 다음과 같이 작성했다.
DRF의 권한 문서를 참조했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from rest_framework.permissions import BasePermission, SAFE_METHODS


class CustomPermission(BasePermission):
    def has_permission(self, request, view):
        if request.method == 'POST':
            return request.user.is_authenticated
        return True


    def has_object_permission(self, request, view, obj):
        if request.method in SAFE_METHODS:
            return True
        return obj.user == request.user or request.user.is_staff

settings.py

settings.py에 다음 설정을 추가했다.

1
2
3
4
REST_FRAMEWORK = {
    ...
    'DEFAULT_PERMISSION_CLASSES': ('cfg.permissions.CustomPermission',),
}

serializers.py (recipes)

RecipeSerializer.create() 메서드를 다음과 같이 수정했다.
여기서 selfRecipeSerializer의 인스턴스이므로 self.request.user로 사용자를 확인할 수는 없다.

1
2
3
4
5
6
7
8
# before
recipe = Recipe.objects.create(**validated_data)

# after
recipe = Recipe.objects.create(
    **validated_data,
    user=self.context.get('request').user
)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.