@@ -128,6 +128,22 @@ def has_object_permission(self, request, view, obj):
128128 return obj .has_permission (auth .user , osf_permissions .WRITE )
129129
130130
131+ class AdminOrWriteContributor (permissions .BasePermission ):
132+ acceptable_models = (AbstractNode , OSFUser , Institution , BaseAddonSettings , DraftRegistration )
133+
134+ def has_object_permission (self , request , view , obj ):
135+ if isinstance (obj , dict ) and 'self' in obj :
136+ obj = obj ['self' ]
137+
138+ assert_resource_type (obj , self .acceptable_models )
139+ auth = get_user_auth (request )
140+
141+ if request .method in permissions .SAFE_METHODS :
142+ return obj .is_public or obj .can_view (auth )
143+
144+ return obj .has_permission (auth .user , osf_permissions .ADMIN ) or obj .has_permission (auth .user , osf_permissions .WRITE )
145+
146+
131147class AdminOrPublic (permissions .BasePermission ):
132148
133149 acceptable_models = (AbstractNode , OSFUser , Institution , BaseAddonSettings , DraftRegistration )
@@ -142,6 +158,7 @@ def has_object_permission(self, request, view, obj):
142158 if request .method in permissions .SAFE_METHODS :
143159 return obj .is_public or obj .can_view (auth )
144160 else :
161+
145162 return obj .has_permission (auth .user , osf_permissions .ADMIN )
146163
147164class AdminContributorOrPublic (permissions .BasePermission ):
0 commit comments