1+ from django .contrib .auth import get_user_model
12from rest_framework import permissions
23from rest_framework .permissions import SAFE_METHODS
34
5+ from partner_programs .models import PartnerProgram
46from projects .models import Project
57
8+ User = get_user_model ()
9+
610
711class IsNewsCreatorOrReadOnly (permissions .BasePermission ):
812 def has_object_permission (self , request , view , obj ):
@@ -12,12 +16,14 @@ def has_object_permission(self, request, view, obj):
1216 """
1317 if request .method in SAFE_METHODS :
1418 return True
15- if isinstance (obj .content_object , Project ):
16- # it's a project
17- if obj .content_object .leader == request .user :
18- return True
19- else :
20- # it's a partner program
19+ if (
20+ isinstance (obj .content_object , Project )
21+ and obj .content_object .leader == request .user
22+ ):
23+ return True
24+ if isinstance (obj .content_object , User ) and obj .content_object == request .user :
25+ return True
26+ if isinstance (obj .content_object , PartnerProgram ):
2127 # TODO: implement
2228 pass
2329 return False
@@ -27,19 +33,23 @@ def has_permission(self, request, view):
2733 Creation permission
2834 Currently can only be created via admin panel
2935 """
30- # everybody can read this
3136 if request .method in SAFE_METHODS :
3237 return True
3338
34- try :
35- # try to judge it as a project
36- project = Project .objects .get (pk = view .kwargs ["project_pk" ])
37- if request .method in SAFE_METHODS or (request .user == project .leader ):
38- return True
39- except Project .DoesNotExist :
40- return False
41- except KeyError :
42- # It's a partner program, currently can only be created via admin
43- # TODO: implement
44- pass
39+ if view .kwargs .get ("project_pk" ):
40+ try :
41+ project = Project .objects .get (pk = view .kwargs ["project_pk" ])
42+ if request .method in SAFE_METHODS or (request .user == project .leader ):
43+ return True
44+ except Project .DoesNotExist :
45+ return False
46+
47+ if view .kwargs .get ("user_pk" ):
48+ try :
49+ user = User .objects .get (pk = view .kwargs ["user_pk" ])
50+ if request .method in SAFE_METHODS or (request .user == user ):
51+ return True
52+ except User .DoesNotExist :
53+ return False
54+
4555 return False
0 commit comments