1
1
from django .shortcuts import get_object_or_404
2
-
3
- from rest_framework .viewsets import ModelViewSet
4
2
from rest_framework .permissions import IsAuthenticatedOrReadOnly
5
3
from rest_framework .response import Response
4
+ from rest_framework .viewsets import ModelViewSet
6
5
7
- from sponsor .serializers import (
8
- SponsorSerializer ,
9
- SponsorListSerializer ,
10
- )
11
6
from sponsor .models import Sponsor
7
+ from sponsor .permissions import IsOwnerOrReadOnly , OwnerOnly
8
+ from sponsor .serializers import SponsorListSerializer , SponsorSerializer
12
9
13
10
14
11
class SponsorViewSet (ModelViewSet ):
15
12
serializer_class = SponsorSerializer
16
- permission_classes = [IsAuthenticatedOrReadOnly ] # 로그인된 사용자에게만 허용
13
+ permission_classes = [IsOwnerOrReadOnly ] # 본인 소유만 수정가능
17
14
18
15
def get_queryset (self ):
19
16
return Sponsor .objects .all ()
@@ -33,5 +30,17 @@ def retrieve(self, request, *args, **kwargs):
33
30
pk = kwargs ["pk" ]
34
31
sponsor_data = get_object_or_404 (Sponsor , pk = pk )
35
32
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
+
37
41
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