prototype for new copy GET details

This commit is contained in:
AlanCoding
2017-01-11 12:23:57 -05:00
parent e69dc0f36e
commit 2c97425291
3 changed files with 29 additions and 19 deletions

View File

@@ -2906,12 +2906,16 @@ class WorkflowJobTemplateCopy(WorkflowsEnforcementMixin, GenericAPIView):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
obj = self.get_object() obj = self.get_object()
data = {} can_copy, messages = request.user.can_access_with_errors(self.model, 'copy', obj)
copy_TF, messages = request.user.can_access_with_errors(self.model, 'copy', obj) data = {
data['can_copy'] = copy_TF 'can_copy': can_copy, 'can_copy_without_user_input': can_copy,
data['warnings'] = messages 'templates_unable_to_copy': [] if can_copy else ['all'],
if not copy_TF: 'credentials_unable_to_copy': [] if can_copy else ['all'],
data['warnings'] = _('You do not have permission to make a copy.') 'inventories_unable_to_copy': [] if can_copy else ['all']
}
if messages and can_copy:
data['can_copy_without_user_input'] = False
data.update(messages)
return Response(data) return Response(data)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):

View File

@@ -1537,22 +1537,28 @@ class WorkflowJobTemplateAccess(BaseAccess):
def can_copy(self, obj): def can_copy(self, obj):
if self.save_messages: if self.save_messages:
wfjt_errors = {} missing_ujt = []
missing_credentials = []
missing_inventories = []
qs = obj.workflow_job_template_nodes qs = obj.workflow_job_template_nodes
qs.select_related('unified_job_template', 'inventory', 'credential') qs.select_related('unified_job_template', 'inventory', 'credential')
for node in qs.all(): for node in qs.all():
node_errors = {} node_errors = {}
if node.inventory and self.user not in node.inventory.use_role: if node.inventory and self.user not in node.inventory.use_role:
node_errors['inventory'] = 'Prompted inventory %s can not be copied.' % node.inventory.name missing_inventories.append(node.inventory.name)
if node.credential and self.user not in node.credential.use_role: if node.credential and self.user not in node.credential.use_role:
node_errors['credential'] = 'Prompted credential %s can not be copied.' % node.credential.name missing_credentials.append(node.credential.name)
ujt = node.unified_job_template ujt = node.unified_job_template
if ujt and not self.user.can_access(UnifiedJobTemplate, 'start', ujt, validate_license=False): if ujt and not self.user.can_access(UnifiedJobTemplate, 'start', ujt, validate_license=False):
node_errors['unified_job_template'] = ( missing_ujt.append(ujt.name)
'Prompted %s %s can not be copied.' % (ujt._meta.verbose_name_raw, ujt.name))
if node_errors: if node_errors:
wfjt_errors[node.id] = node_errors wfjt_errors[node.id] = node_errors
self.messages.update(wfjt_errors) if missing_ujt:
self.messages['templates_unable_to_copy'] = missing_ujt
if missing_credentials:
self.messages['credentials_unable_to_copy'] = missing_credentials
if missing_inventories:
self.messages['inventories_unable_to_copy'] = missing_inventories
return self.check_related('organization', Organization, {'reference_obj': obj}, mandatory=True) return self.check_related('organization', Organization, {'reference_obj': obj}, mandatory=True)

View File

@@ -220,7 +220,7 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'Rest',
.then(function(result) { .then(function(result) {
if(result.data.can_copy) { if(result.data.can_copy) {
if(!result.data.warnings || _.isEmpty(result.data.warnings)) { if(result.data.can_copy_without_user_input) {
// Go ahead and copy the workflow - the user has full priveleges on all the resources // Go ahead and copy the workflow - the user has full priveleges on all the resources
TemplateCopyService.copyWorkflow(template.id) TemplateCopyService.copyWorkflow(template.id)
.then(function(result) { .then(function(result) {
@@ -235,16 +235,16 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'Rest',
let bodyHtml = ` let bodyHtml = `
<div class="Prompt-bodyQuery"> <div class="Prompt-bodyQuery">
You may not have access to all resources used by this workflow. Resources that you don\'t have access to will not be copied and may result in an incomplete workflow. You do not have access to all resources used by this workflow. Resources that you don\'t have access to will not be copied and will result in an incomplete workflow.
</div> </div>
<div class="Prompt-bodyTarget">`; <div class="Prompt-bodyTarget">`;
// Go and grab all of the warning strings // Go and grab all of the warning strings
_.forOwn(result.data.warnings, function(warning) { _.forOwn(result.data.templates_unable_to_copy, function(ujt) {
if(warning) { if(ujt) {
_.forOwn(warning, function(warningString) { // _.forOwn(ujts, function(warningString) {
bodyHtml += '<div>' + warningString + '</div>'; bodyHtml += '<div>' + ujt + '</div>';
}); // });
} }
} ); } );