11from django .shortcuts import get_object_or_404
2-
3- from rest_framework .viewsets import ModelViewSet
42from rest_framework .permissions import IsAuthenticatedOrReadOnly
53from rest_framework .response import Response
4+ from rest_framework .viewsets import ModelViewSet
65
7- from sponsor .serializers import (
8- SponsorSerializer ,
9- SponsorListSerializer ,
10- )
116from sponsor .models import Sponsor
7+ from sponsor .permissions import IsOwnerOrReadOnly , OwnerOnly
8+ from sponsor .serializers import SponsorListSerializer , SponsorSerializer
129
1310
1411class SponsorViewSet (ModelViewSet ):
1512 serializer_class = SponsorSerializer
16- permission_classes = [IsAuthenticatedOrReadOnly ] # 로그인된 사용자에게만 허용
13+ permission_classes = [IsOwnerOrReadOnly ] # 본인 소유만 수정가능
1714
1815 def get_queryset (self ):
1916 return Sponsor .objects .all ()
@@ -33,5 +30,17 @@ def retrieve(self, request, *args, **kwargs):
3330 pk = kwargs ["pk" ]
3431 sponsor_data = get_object_or_404 (Sponsor , pk = pk )
3532
36- serializer = SponsorSerializer (sponsor_data )
33+ # 본인 소유인 경우는 모든 필드
34+ # 그렇지 않은 경우는 공개 가능한 필드만 응답
35+ serializer = (
36+ SponsorSerializer (sponsor_data )
37+ if self .check_owner_permission (request , sponsor_data )
38+ else SponsorListSerializer (sponsor_data )
39+ )
40+
3741 return Response (serializer .data )
42+
43+ def check_owner_permission (self , request , sponsor_data : Sponsor ):
44+ return OwnerOnly .has_object_permission (
45+ self = OwnerOnly , request = request , view = self , obj = sponsor_data
46+ )
0 commit comments