From ca32c34036a69709875548d50ab51e9c23efde33 Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Thu, 10 Nov 2016 16:43:23 -0500 Subject: [PATCH] Added a lot of permissions related logic to the workflow form as well as the workflow maker. I know it's not perfect but its a step in the right direction. --- awx/ui/client/src/forms/JobTemplates.js | 54 ++++++------ awx/ui/client/src/forms/WorkflowMaker.js | 23 +++-- awx/ui/client/src/forms/Workflows.js | 28 +++++-- .../job-template-edit.controller.js | 2 +- .../edit-workflow/workflow-edit.controller.js | 27 +----- .../list/job-templates-list.controller.js | 9 +- awx/ui/client/src/job-templates/main.js | 14 +++- .../workflow-chart.directive.js | 84 +++++++++++-------- .../workflow-maker.controller.js | 11 +-- .../workflow-maker.directive.js | 3 +- .../workflow-maker.partial.html | 4 +- awx/ui/client/src/lists/JobTemplates.js | 8 +- .../list-generator/list-actions.partial.html | 4 +- 13 files changed, 145 insertions(+), 126 deletions(-) diff --git a/awx/ui/client/src/forms/JobTemplates.js b/awx/ui/client/src/forms/JobTemplates.js index d7e0b502ee..00f4c5f131 100644 --- a/awx/ui/client/src/forms/JobTemplates.js +++ b/awx/ui/client/src/forms/JobTemplates.js @@ -33,7 +33,7 @@ export default name: { label: i18n._('Name'), type: 'text', - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)', + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)', required: true, column: 1 }, @@ -41,7 +41,7 @@ export default label: i18n._('Description'), type: 'text', column: 1, - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, job_type: { label: i18n._('Job Type'), @@ -63,7 +63,7 @@ export default ngShow: "!job_type.value || job_type.value !== 'scan'", text: i18n._('Prompt on launch') }, - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, inventory: { label: i18n._('Inventory'), @@ -87,7 +87,7 @@ export default ngShow: "!job_type.value || job_type.value !== 'scan'", text: i18n._('Prompt on launch') }, - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, project: { label: i18n._('Project'), @@ -110,13 +110,13 @@ export default dataTitle: i18n._('Project'), dataPlacement: 'right', dataContainer: "body", - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, playbook: { label: i18n._('Playbook'), type:'select', ngOptions: 'book for book in playbook_options track by book', - ngDisabled: "(job_type.value === 'scan' && project_name === 'Default') || !(job_template_obj.summary_fields.user_capabilities.edit || canAdd)", + ngDisabled: "(job_type.value === 'scan' && project_name === 'Default') || !(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)", id: 'playbook-select', awRequiredWhen: { reqExpression: "playbookrequired", @@ -154,7 +154,7 @@ export default variable: 'ask_credential_on_launch', text: i18n._('Prompt on launch') }, - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, cloud_credential: { label: i18n._('Cloud Credential'), @@ -172,7 +172,7 @@ export default dataTitle: i18n._('Cloud Credential'), dataPlacement: 'right', dataContainer: "body", - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, network_credential: { label: i18n._('Network Credential'), @@ -189,7 +189,7 @@ export default dataTitle: i18n._('Network Credential'), dataPlacement: 'right', dataContainer: "body", - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, forks: { label: i18n._('Forks'), @@ -207,7 +207,7 @@ export default dataTitle: i18n._('Forks'), dataPlacement: 'right', dataContainer: "body", - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' // TODO: get working + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' // TODO: get working }, limit: { label: i18n._('Limit'), @@ -223,7 +223,7 @@ export default variable: 'ask_limit_on_launch', text: i18n._('Prompt on launch') }, - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, verbosity: { label: i18n._('Verbosity'), @@ -236,7 +236,7 @@ export default dataTitle: i18n._('Verbosity'), dataPlacement: 'right', dataContainer: "body", - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, job_tags: { label: i18n._('Job Tags'), @@ -254,7 +254,7 @@ export default variable: 'ask_tags_on_launch', text: i18n._('Prompt on launch') }, - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, skip_tags: { label: i18n._('Skip Tags'), @@ -272,7 +272,7 @@ export default variable: 'ask_skip_tags_on_launch', text: i18n._('Prompt on launch') }, - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, checkbox_group: { label: i18n._('Options'), @@ -287,7 +287,7 @@ export default dataTitle: i18n._('Become Privilege Escalation'), dataContainer: "body", labelClass: 'stack-inline', - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, { name: 'allow_callbacks', label: i18n._('Allow Provisioning Callbacks'), @@ -300,7 +300,7 @@ export default dataTitle: i18n._('Allow Provisioning Callbacks'), dataContainer: "body", labelClass: 'stack-inline', - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }] }, callback_url: { @@ -314,7 +314,7 @@ export default dataPlacement: 'top', dataTitle: i18n._('Provisioning Callback URL'), dataContainer: "body", - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, host_config_key: { label: i18n._('Host Config Key'), @@ -328,7 +328,7 @@ export default dataPlacement: 'right', dataTitle: i18n._("Host Config Key"), dataContainer: "body", - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, labels: { label: i18n._('Labels'), @@ -340,7 +340,7 @@ export default dataPlacement: 'right', awPopOver: i18n._("

Optional labels that describe this job template, such as 'dev' or 'test'. Labels can be used to group and filter job templates and completed jobs in the Tower display.

"), dataContainer: 'body', - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' }, variables: { label: i18n._('Extra Variables'), @@ -362,14 +362,14 @@ export default variable: 'ask_variables_on_launch', text: i18n._('Prompt on launch') }, - ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' // TODO: get working + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)' // TODO: get working } }, buttons: { //for now always generates - + diff --git a/awx/ui/client/src/lists/JobTemplates.js b/awx/ui/client/src/lists/JobTemplates.js index a85c49613b..80c1002074 100644 --- a/awx/ui/client/src/lists/JobTemplates.js +++ b/awx/ui/client/src/lists/JobTemplates.js @@ -64,14 +64,16 @@ export default options: [ { optionContent: 'Job Template', - optionSref: 'templates.addJobTemplate' + optionSref: 'templates.addJobTemplate', + ngShow: 'canAddJobTemplate' }, { optionContent: 'Workflow Job Template', - optionSref: 'templates.addWorkflowJobTemplate' + optionSref: 'templates.addWorkflowJobTemplate', + ngShow: 'canAddWorkflowJobTemplate' } ], - ngShow: 'canAdd' + ngShow: 'canAddJobTemplate || canAddWorkflowJobTemplate' } }, diff --git a/awx/ui/client/src/shared/list-generator/list-actions.partial.html b/awx/ui/client/src/shared/list-generator/list-actions.partial.html index 764c04d1ef..796b370924 100644 --- a/awx/ui/client/src/shared/list-generator/list-actions.partial.html +++ b/awx/ui/client/src/shared/list-generator/list-actions.partial.html @@ -10,7 +10,7 @@ @@ -37,7 +37,7 @@