2121from geonode .people .utils import get_available_users
2222from django .contrib .auth import get_user_model
2323from django .shortcuts import get_object_or_404
24+ from geonode .resource .manager import resource_manager
2425
2526
2627class UserViewSet (DynamicModelViewSet ):
@@ -147,7 +148,7 @@ def remove_from_group_manager(self, request, pk=None):
147148 def transfer_resources (self , request , pk = None ):
148149 user = self .get_object ()
149150 admin = get_user_model ().objects .filter (is_superuser = True , is_staff = True ).first ()
150- target_user = request .data .get ("owner" )
151+ target_user = request .data .get ("owner" ) # 1002
151152 transfer_resource_subset = request .POST .getlist ("resources" , None )
152153 target = None
153154 if target_user == "DEFAULT" :
@@ -160,11 +161,25 @@ def transfer_resources(self, request, pk=None):
160161 if target == user :
161162 return Response ("Cannot reassign to self" , status = 400 )
162163
164+ filter_payload = {}
165+
163166 if transfer_resource_subset :
164167 # transfer_resources
165- ResourceBase .objects .filter (owner = user , pk__in = transfer_resource_subset ).update (owner = target or user )
166- else :
167- # transfer all the resources to target
168- ResourceBase .objects .filter (owner = user ).update (owner = target or user )
168+ filter_payload ["pk__in" ] = transfer_resource_subset
169+
170+ if not user .is_superuser :
171+ """
172+ if the request user is not admin, we will filter for the resources
173+ thats owns
174+ """
175+ filter_payload ["owner" ] = user
176+
177+ for instance in ResourceBase .objects .filter (** filter_payload ).iterator ():
178+ """
179+ We should reassing all the permissions to the new resource owner
180+ we can use the resource manager because inside it will automatically update
181+ the owner
182+ """
183+ resource_manager .set_permissions (instance .uuid , instance , owner = target or user )
169184
170185 return Response ("Resources transfered successfully" , status = 200 )
0 commit comments