Skip to content

Commit fa4ebbc

Browse files
[Fixes #12996] Allow changing ownership of a single resource
1 parent 7e3439e commit fa4ebbc

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

geonode/people/api/views.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from geonode.people.utils import get_available_users
2222
from django.contrib.auth import get_user_model
2323
from django.shortcuts import get_object_or_404
24+
from geonode.resource.manager import resource_manager
2425

2526

2627
class 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

Comments
 (0)