mirror of
https://github.com/ansible/awx.git
synced 2026-03-21 02:47:35 -02:30
implement two methods for can_edit field for testing
This commit is contained in:
@@ -330,6 +330,12 @@ class BaseSerializer(serializers.ModelSerializer):
|
|||||||
}
|
}
|
||||||
if len(roles) > 0:
|
if len(roles) > 0:
|
||||||
summary_fields['object_roles'] = roles
|
summary_fields['object_roles'] = roles
|
||||||
|
if hasattr(obj, 'get_can_edit'):
|
||||||
|
request = self.context.get('request', None)
|
||||||
|
if request and request.user is not None:
|
||||||
|
summary_fields['can_edit'] = obj.get_can_edit(request.user)
|
||||||
|
elif hasattr(obj, 'can_edit'):
|
||||||
|
summary_fields['can_edit'] = obj.can_edit
|
||||||
return summary_fields
|
return summary_fields
|
||||||
|
|
||||||
def get_created(self, obj):
|
def get_created(self, obj):
|
||||||
|
|||||||
@@ -1521,6 +1521,24 @@ class InventoryList(ListCreateAPIView):
|
|||||||
qs = qs.select_related('admin_role', 'read_role', 'update_role', 'use_role', 'adhoc_role')
|
qs = qs.select_related('admin_role', 'read_role', 'update_role', 'use_role', 'adhoc_role')
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
|
def list(self, request, *args, **kwargs):
|
||||||
|
queryset = self.filter_queryset(self.get_queryset())
|
||||||
|
|
||||||
|
page = self.paginate_queryset(queryset)
|
||||||
|
readable_ids = [obj.id for obj in page]
|
||||||
|
editable_ids = Inventory.accessible_objects(request.user, 'admin_role').filter(pk__in=readable_ids).values_list('pk', flat=True)
|
||||||
|
for obj in page:
|
||||||
|
if obj.pk in editable_ids:
|
||||||
|
obj.can_edit = True
|
||||||
|
else:
|
||||||
|
obj.can_edit = False
|
||||||
|
if page is not None:
|
||||||
|
serializer = self.get_serializer(page, many=True)
|
||||||
|
return self.get_paginated_response(serializer.data)
|
||||||
|
|
||||||
|
serializer = self.get_serializer(queryset, many=True)
|
||||||
|
return Response(serializer.data)
|
||||||
|
|
||||||
class InventoryDetail(RetrieveUpdateDestroyAPIView):
|
class InventoryDetail(RetrieveUpdateDestroyAPIView):
|
||||||
|
|
||||||
model = Inventory
|
model = Inventory
|
||||||
|
|||||||
@@ -105,6 +105,9 @@ class ProjectOptions(models.Model):
|
|||||||
on_delete=models.SET_NULL,
|
on_delete=models.SET_NULL,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_can_edit(self, user):
|
||||||
|
return user in self.admin_role
|
||||||
|
|
||||||
def clean_scm_type(self):
|
def clean_scm_type(self):
|
||||||
return self.scm_type or ''
|
return self.scm_type or ''
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user