mirror of
https://github.com/ansible/awx.git
synced 2026-02-23 22:16:00 -03:30
wrap up some more implementation, and get caching seriously working
This commit is contained in:
@@ -2153,7 +2153,6 @@ class AdHocCommandRelaunchSerializer(AdHocCommandSerializer):
|
|||||||
|
|
||||||
|
|
||||||
class SystemJobTemplateSerializer(UnifiedJobTemplateSerializer):
|
class SystemJobTemplateSerializer(UnifiedJobTemplateSerializer):
|
||||||
show_capabilities = ['start', 'schedule', 'edit']
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SystemJobTemplate
|
model = SystemJobTemplate
|
||||||
|
|||||||
@@ -1528,10 +1528,9 @@ class InventoryList(ListCreateAPIView):
|
|||||||
readable_ids = [obj.id for obj in page]
|
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)
|
editable_ids = Inventory.accessible_objects(request.user, 'admin_role').filter(pk__in=readable_ids).values_list('pk', flat=True)
|
||||||
for obj in page:
|
for obj in page:
|
||||||
|
obj.capabilities_cache = {'edit': False, 'adhoc': False}
|
||||||
if obj.pk in editable_ids:
|
if obj.pk in editable_ids:
|
||||||
obj.can_edit = True
|
obj.capabilities_cache['edit'] = True
|
||||||
else:
|
|
||||||
obj.can_edit = False
|
|
||||||
if page is not None:
|
if page is not None:
|
||||||
serializer = self.get_serializer(page, many=True)
|
serializer = self.get_serializer(page, many=True)
|
||||||
return self.get_paginated_response(serializer.data)
|
return self.get_paginated_response(serializer.data)
|
||||||
|
|||||||
@@ -219,18 +219,18 @@ class BaseAccess(object):
|
|||||||
elif "features" not in validation_info:
|
elif "features" not in validation_info:
|
||||||
raise LicenseForbids("Features not found in active license.")
|
raise LicenseForbids("Features not found in active license.")
|
||||||
|
|
||||||
def get_user_capabilities(self, obj, method_list=['edit', 'delete']):
|
def get_user_capabilities(self, obj, method_list):
|
||||||
user_capabilities = {}
|
user_capabilities = {}
|
||||||
|
|
||||||
# TODO: pull data from the custom cache, which won't be exactly like this
|
for display_method in ['edit', 'delete', 'start', 'schedule', 'copy', 'adhoc']:
|
||||||
# if hasattr(obj, 'get_can_edit'):
|
|
||||||
# user_capabilities['change'] = obj.get_can_edit(self.user)
|
|
||||||
# elif hasattr(obj, 'can_edit'):
|
|
||||||
# user_capabilities['change'] = obj.can_edit
|
|
||||||
|
|
||||||
for display_method in ['edit', 'delete', 'start', 'schedule', 'copy']:
|
|
||||||
# Custom ordering of methods used so we can reuse earlier calcs
|
# Custom ordering of methods used so we can reuse earlier calcs
|
||||||
if display_method not in method_list:
|
if display_method not in method_list:
|
||||||
|
print ' Programming error: declared unavailable method'
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Grab the answer from the cache, if available
|
||||||
|
if hasattr(obj, 'capabilities_cache') and display_method in obj.capabilities_cache:
|
||||||
|
user_capabilities[display_method] = obj.capabilities_cache[display_method]
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Aliases for going form UI language to API language
|
# Aliases for going form UI language to API language
|
||||||
@@ -245,6 +245,8 @@ class BaseAccess(object):
|
|||||||
elif display_method == 'delete' and not isinstance(obj, (User, UnifiedJob)):
|
elif display_method == 'delete' and not isinstance(obj, (User, UnifiedJob)):
|
||||||
user_capabilities['delete'] = user_capabilities['edit']
|
user_capabilities['delete'] = user_capabilities['edit']
|
||||||
continue
|
continue
|
||||||
|
elif display_method == 'adhoc':
|
||||||
|
method = 'run_ad_hoc_commands'
|
||||||
else:
|
else:
|
||||||
method = display_method
|
method = display_method
|
||||||
|
|
||||||
@@ -268,7 +270,7 @@ class BaseAccess(object):
|
|||||||
try:
|
try:
|
||||||
if method in ['change']: # 3 args
|
if method in ['change']: # 3 args
|
||||||
user_capabilities[display_method] = self.user.can_access(type(obj), method, obj, data)
|
user_capabilities[display_method] = self.user.can_access(type(obj), method, obj, data)
|
||||||
elif method in ['delete', 'start']: # 2 args
|
elif method in ['delete', 'start', 'adhoc']: # 2 args
|
||||||
user_capabilities[display_method] = self.user.can_access(type(obj), method, obj)
|
user_capabilities[display_method] = self.user.can_access(type(obj), method, obj)
|
||||||
elif method in ['add']: # 2 args with data
|
elif method in ['add']: # 2 args with data
|
||||||
user_capabilities[display_method] = self.user.can_access(type(obj), method, data)
|
user_capabilities[display_method] = self.user.can_access(type(obj), method, data)
|
||||||
|
|||||||
@@ -325,9 +325,6 @@ class Project(UnifiedJobTemplate, ProjectOptions, ResourceMixin):
|
|||||||
kwargs['scm_delete_on_update'] = True
|
kwargs['scm_delete_on_update'] = True
|
||||||
return kwargs
|
return kwargs
|
||||||
|
|
||||||
def get_can_edit(self, user):
|
|
||||||
return user in self.admin_role
|
|
||||||
|
|
||||||
def create_project_update(self, **kwargs):
|
def create_project_update(self, **kwargs):
|
||||||
return self.create_unified_job(**kwargs)
|
return self.create_unified_job(**kwargs)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user