49
49
from geonode .base .models import ResourceBase
50
50
from geonode .base .api .filters import DynamicSearchFilter
51
51
from geonode .groups .models import GroupProfile , GroupMember
52
- from geonode .base .api .permissions import IsSelfOrAdminOrReadOnly
52
+ from geonode .base .api .permissions import IsSelfOrAdminOrReadOnlyUsers
53
53
from geonode .base .api .serializers import UserSerializer , GroupProfileSerializer , ResourceBaseSerializer
54
54
from geonode .base .api .pagination import GeoNodeApiPagination
55
55
@@ -165,6 +165,14 @@ def forgot_username(request):
165
165
return render (request , "people/forgot_username_form.html" , context = {"message" : message , "form" : username_form })
166
166
167
167
168
+ def password_validation (password_payload ):
169
+ try :
170
+ validate_password (password_payload )
171
+ except ValidationErrorForm as err :
172
+ raise ValidationError (detail = "," .join (err .messages ))
173
+ return make_password (password_payload )
174
+
175
+
168
176
class UserViewSet (DynamicModelViewSet ):
169
177
"""
170
178
API endpoint that allows users to be viewed or edited.
@@ -173,7 +181,7 @@ class UserViewSet(DynamicModelViewSet):
173
181
authentication_classes = [SessionAuthentication , BasicAuthentication , OAuth2Authentication ]
174
182
permission_classes = [
175
183
IsAuthenticated ,
176
- IsSelfOrAdminOrReadOnly ,
184
+ IsSelfOrAdminOrReadOnlyUsers ,
177
185
]
178
186
filter_backends = [DynamicFilterBackend , DynamicSortingFilter , DynamicSearchFilter ]
179
187
serializer_class = UserSerializer
@@ -192,18 +200,6 @@ def get_queryset(self):
192
200
queryset = self .get_serializer_class ().setup_eager_loading (queryset )
193
201
return queryset .order_by ("username" )
194
202
195
- def perform_destroy (self , instance ):
196
- # not implemented added to make tests pass
197
- if any (
198
- (
199
- not self .request .user .is_superuser ,
200
- not self .request .user .is_staff ,
201
- self .request .user .pk == int (self .kwargs ["pk" ]),
202
- )
203
- ):
204
- raise PermissionDenied ()
205
- instance .delete ()
206
-
207
203
def perform_create (self , serializer ):
208
204
user = self .request .user
209
205
if not (user .is_superuser or user .is_staff ):
@@ -214,26 +210,19 @@ def perform_create(self, serializer):
214
210
215
211
if ACCOUNT_EMAIL_REQUIRED and email_payload == "" :
216
212
raise ValidationError (detail = "email missing from payload" )
217
- try :
218
- validate_password (password_payload , user = None , password_validators = None )
219
- self .request .data ["password" ] = make_password (password_payload )
220
- except ValidationErrorForm as err :
221
- raise ValidationError (detail = "," .join (err .messages ))
213
+ self .request .data ["password" ] = password_validation (password_payload )
222
214
instance = serializer .save ()
223
215
return instance
224
216
225
217
def update (self , request , * args , ** kwargs ):
226
218
kwargs ["partial" ] = True
227
- if not self .request .user .is_superuser :
219
+ user = self .request .user
220
+ if not (user .is_superuser or user .is_staff ):
228
221
request .data .pop ("is_superuser" , None )
229
222
request .data .pop ("is_staff" , None )
230
223
password_payload = self .request .data .get ("password" , "" )
231
224
if password_payload :
232
- try :
233
- validate_password (password_payload , user = None , password_validators = None )
234
- request .data ["password" ] = make_password (password_payload )
235
- except ValidationErrorForm as err :
236
- raise ValidationError (detail = "," .join (err .messages ))
225
+ request .data ["password" ] = password_validation (password_payload )
237
226
return super ().update (request , * args , ** kwargs )
238
227
239
228
@extend_schema (
0 commit comments