diff --git a/awx/ui/client/src/controllers/Credentials.js b/awx/ui/client/src/controllers/Credentials.js index aed17aee32..11e2b4e435 100644 --- a/awx/ui/client/src/controllers/Credentials.js +++ b/awx/ui/client/src/controllers/Credentials.js @@ -14,9 +14,14 @@ export function CredentialsList($scope, $rootScope, $location, $log, $stateParams, Rest, Alert, CredentialList, GenerateList, Prompt, SearchInit, PaginateInit, ReturnToCaller, ClearScope, ProcessErrors, GetBasePath, - SelectionInit, GetChoices, Wait, $state, $filter) { + SelectionInit, GetChoices, Wait, $state, $filter, rbacUiControlService) { ClearScope(); + rbacUiControlService.canAdd('credentials') + .then(function(canAdd) { + $scope.canAdd = canAdd; + }); + Wait('start'); var list = CredentialList, @@ -129,7 +134,7 @@ CredentialsList.$inject = ['$scope', '$rootScope', '$location', '$log', '$stateParams', 'Rest', 'Alert', 'CredentialList', 'generateList', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'ClearScope', 'ProcessErrors', 'GetBasePath', 'SelectionInit', 'GetChoices', 'Wait', - '$state', '$filter' + '$state', '$filter', 'rbacUiControlService' ]; @@ -349,6 +354,12 @@ export function CredentialsEdit($scope, $rootScope, $compile, $location, $log, generator.reset(); $scope.id = id; + $scope.$watch('credential_obj.summary_fields.user_capabilities.edit', function(val) { + if (val === false) { + $scope.canAdd = false; + } + }); + $scope.canShareCredential = false; if ($rootScope.current_user.is_superuser) { diff --git a/awx/ui/client/src/controllers/Projects.js b/awx/ui/client/src/controllers/Projects.js index 6c882cdd13..f5db4a2b8c 100644 --- a/awx/ui/client/src/controllers/Projects.js +++ b/awx/ui/client/src/controllers/Projects.js @@ -574,6 +574,12 @@ export function ProjectsEdit($scope, $rootScope, $compile, $location, $log, ClearScope('htmlTemplate'); + $scope.$watch('project_obj.summary_fields.user_capabilities.edit', function(val) { + if (val === false) { + $scope.canAdd = false; + } + }); + // Inject dynamic view var form = ProjectsForm(), generator = GenerateForm, diff --git a/awx/ui/client/src/controllers/Teams.js b/awx/ui/client/src/controllers/Teams.js index ca30f84699..aded8e5824 100644 --- a/awx/ui/client/src/controllers/Teams.js +++ b/awx/ui/client/src/controllers/Teams.js @@ -223,6 +223,12 @@ export function TeamsEdit($scope, $rootScope, $location, $scope.team_id = id; + $scope.$watch('team_obj.summary_fields.user_capabilities.edit', function(val) { + if (val === false) { + $scope.canAdd = false; + } + }); + generator.inject(form, { mode: 'edit', related: true, scope: $scope }); generator.reset(); diff --git a/awx/ui/client/src/controllers/Users.js b/awx/ui/client/src/controllers/Users.js index 0a00ed97c3..eb55a1bbb2 100644 --- a/awx/ui/client/src/controllers/Users.js +++ b/awx/ui/client/src/controllers/Users.js @@ -294,6 +294,12 @@ export function UsersEdit($scope, $rootScope, $location, $scope.user_type = user_type_options[0]; $scope.$watch('user_type', user_type_sync($scope)); + $scope.$watch('user_obj.summary_fields.user_capabilities.edit', function(val) { + if (val === false) { + $scope.canAdd = false; + } + }); + var setScopeFields = function(data){ _(data) .pick(function(value, key){ diff --git a/awx/ui/client/src/forms/Credentials.js b/awx/ui/client/src/forms/Credentials.js index c75f30c8be..abcbbd476d 100644 --- a/awx/ui/client/src/forms/Credentials.js +++ b/awx/ui/client/src/forms/Credentials.js @@ -33,14 +33,14 @@ export default addRequired: true, editRequired: true, autocomplete: false, - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, description: { label: 'Description', type: 'text', addRequired: false, editRequired: false, - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, organization: { addRequired: false, @@ -55,7 +55,7 @@ export default dataTitle: 'Organization ', dataPlacement: 'bottom', dataContainer: "body", - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, kind: { label: 'Type', @@ -87,7 +87,7 @@ export default dataPlacement: 'right', dataContainer: "body", hasSubForm: true, - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, access_key: { label: 'Access Key', @@ -100,13 +100,13 @@ export default autocomplete: false, apiField: 'username', subForm: 'credentialSubForm', - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, secret_key: { label: 'Secret Key', type: 'sensitive', ngShow: "kind.value == 'aws'", - ngDisabled: "secret_key_ask || !credential_obj.summary_fields.user_capabilities.edit", + ngDisabled: "secret_key_ask || !(credential_obj.summary_fields.user_capabilities.edit || canAdd)", awRequiredWhen: { reqExpression: "aws_required", init: false @@ -129,7 +129,7 @@ export default dataPlacement: 'right', dataContainer: "body", subForm: 'credentialSubForm', - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "host": { labelBind: 'hostLabel', @@ -146,7 +146,7 @@ export default init: false }, subForm: 'credentialSubForm', - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "subscription": { label: "Subscription ID", @@ -164,7 +164,7 @@ export default dataPlacement: 'right', dataContainer: "body", subForm: 'credentialSubForm', - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "username": { labelBind: 'usernameLabel', @@ -177,7 +177,7 @@ export default }, autocomplete: false, subForm: "credentialSubForm", - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "email_address": { labelBind: 'usernameLabel', @@ -193,7 +193,7 @@ export default dataPlacement: 'right', dataContainer: "body", subForm: 'credentialSubForm', - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "api_key": { label: 'API Key', @@ -207,7 +207,7 @@ export default hasShowInputButton: true, clear: false, subForm: 'credentialSubForm', - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "password": { labelBind: 'passwordLabel', @@ -221,13 +221,13 @@ export default init: false }, subForm: "credentialSubForm", - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "ssh_password": { label: 'Password', type: 'sensitive', ngShow: "kind.value == 'ssh'", - ngDisabled: "ssh_password_ask || !credential_obj.summary_fields.user_capabilities.edit", + ngDisabled: "ssh_password_ask || !(credential_obj.summary_fields.user_capabilities.edit || canAdd)", addRequired: false, editRequired: false, subCheckbox: { @@ -260,7 +260,7 @@ export default dataPlacement: 'right', dataContainer: "body", subForm: "credentialSubForm", - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "ssh_key_unlock": { label: 'Private Key Passphrase', @@ -268,7 +268,7 @@ export default ngShow: "kind.value == 'ssh' || kind.value == 'scm'", addRequired: false, editRequired: false, - ngDisabled: "keyEntered === false || ssh_key_unlock_ask || !credential_obj.summary_fields.user_capabilities.edit", + ngDisabled: "keyEntered === false || ssh_key_unlock_ask || !(credential_obj.summary_fields.user_capabilities.edit || canAdd)", subCheckbox: { variable: 'ssh_key_unlock_ask', ngShow: "kind.value == 'ssh'", @@ -292,7 +292,7 @@ export default dataPlacement: 'right', dataContainer: "body", subForm: 'credentialSubForm', - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "become_username": { labelBind: 'becomeUsernameLabel', @@ -302,13 +302,13 @@ export default editRequired: false, autocomplete: false, subForm: 'credentialSubForm', - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "become_password": { labelBind: 'becomePasswordLabel', type: 'sensitive', ngShow: "(kind.value == 'ssh' && (become_method && become_method.value)) ", - ngDisabled: "become_password_ask || !credential_obj.summary_fields.user_capabilities.edit", + ngDisabled: "become_password_ask || !(credential_obj.summary_fields.user_capabilities.edit || canAdd)", addRequired: false, editRequired: false, subCheckbox: { @@ -325,7 +325,7 @@ export default label: 'Client ID', subForm: 'credentialSubForm', ngShow: "kind.value === 'azure_rm'", - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, secret:{ type: 'sensitive', @@ -334,14 +334,14 @@ export default label: 'Client Secret', subForm: 'credentialSubForm', ngShow: "kind.value === 'azure_rm'", - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, tenant: { type: 'text', label: 'Tenant ID', subForm: 'credentialSubForm', ngShow: "kind.value === 'azure_rm'", - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, authorize: { label: 'Authorize', @@ -349,7 +349,7 @@ export default ngChange: "toggleCallback('host_config_key')", subForm: 'credentialSubForm', ngShow: "kind.value === 'net'", - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, authorize_password: { label: 'Authorize Password', @@ -358,7 +358,7 @@ export default autocomplete: false, subForm: 'credentialSubForm', ngShow: "authorize && authorize !== 'false'", - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "project": { labelBind: 'projectLabel', @@ -376,7 +376,7 @@ export default init: false }, subForm: 'credentialSubForm', - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "domain": { labelBind: 'domainLabel', @@ -393,13 +393,13 @@ export default addRequired: false, editRequired: false, subForm: 'credentialSubForm', - ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, "vault_password": { label: "Vault Password", type: 'sensitive', ngShow: "kind.value == 'ssh'", - ngDisabled: "vault_password_ask || !credential_obj.summary_fields.user_capabilities.edit", + ngDisabled: "vault_password_ask || !(credential_obj.summary_fields.user_capabilities.edit || canAdd)", addRequired: false, editRequired: false, subCheckbox: { @@ -416,17 +416,17 @@ export default buttons: { cancel: { ngClick: 'formCancel()', - ngShow: 'credential_obj.summary_fields.user_capabilities.edit' + ngShow: '(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, close: { ngClick: 'formCancel()', - ngShow: '!credential_obj.summary_fields.user_capabilities.edit' + ngShow: '!(credential_obj.summary_fields.user_capabilities.edit || canAdd)' }, save: { label: 'Save', ngClick: 'formSave()', //$scope.function to call on click, optional ngDisabled: true, - ngShow: 'credential_obj.summary_fields.user_capabilities.edit' //Disable when $pristine or $invalid, optional + ngShow: '(credential_obj.summary_fields.user_capabilities.edit || canAdd)' //Disable when $pristine or $invalid, optional } }, @@ -450,7 +450,7 @@ export default awToolTip: 'Add a permission', actionClass: 'btn List-buttonSubmit', buttonContent: '+ ADD', - ngShow: 'credential_obj.summary_fields.user_capabilities.edit' + ngShow: '(credential_obj.summary_fields.user_capabilities.edit || canAdd)' } }, diff --git a/awx/ui/client/src/forms/Groups.js b/awx/ui/client/src/forms/Groups.js index 40a5cd3301..32723ff5f2 100644 --- a/awx/ui/client/src/forms/Groups.js +++ b/awx/ui/client/src/forms/Groups.js @@ -27,7 +27,7 @@ export default addRequired: true, editRequired: true, tab: 'properties', - ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)' }, description: { label: 'Description', @@ -35,7 +35,7 @@ export default addRequired: false, editRequired: false, tab: 'properties', - ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)' }, variables: { label: 'Variables', @@ -68,7 +68,7 @@ export default addRequired: false, editRequired: false, ngModel: 'source', - ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)' }, credential: { label: 'Cloud Credential', @@ -81,7 +81,7 @@ export default reqExpression: "cloudCredentialRequired", init: "false" }, - ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)' }, source_regions: { label: 'Regions', @@ -97,7 +97,7 @@ export default "or choose All to include all regions. Tower will only be updated with Hosts associated with the selected regions." + "

", dataContainer: 'body', - ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)' }, instance_filters: { label: 'Instance Filters', @@ -118,7 +118,7 @@ export default "

View the Describe Instances documentation " + "for a complete list of supported filters.

", dataContainer: 'body', - ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)' }, group_by: { label: 'Only Group By', @@ -144,7 +144,7 @@ export default "
  • Tag None: tags » tag_none
  • " + "

    If blank, all groups above are created except Instance ID.

    ", dataContainer: 'body', - ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)' }, inventory_script: { label : "Custom Inventory Script", @@ -156,7 +156,7 @@ export default addRequired: true, editRequired: true, ngRequired: "source && source.value === 'custom'", - ngDisabled: '!group_obj.summary_fields.user_capabilities.edit', + ngDisabled: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)', }, custom_variables: { id: 'custom_variables', @@ -278,7 +278,7 @@ export default dataContainer: 'body', dataPlacement: 'right', labelClass: 'checkbox-options', - ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)' }, { name: 'overwrite_vars', label: 'Overwrite Variables', @@ -293,7 +293,7 @@ export default dataContainer: 'body', dataPlacement: 'right', labelClass: 'checkbox-options', - ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)' }, { name: 'update_on_launch', label: 'Update on Launch', @@ -307,7 +307,7 @@ export default dataContainer: 'body', dataPlacement: 'right', labelClass: 'checkbox-options', - ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)' }] }, update_cache_timeout: { @@ -333,16 +333,16 @@ export default buttons: { cancel: { ngClick: 'formCancel()', - ngShow: 'group_obj.summary_fields.user_capabilities.edit' + ngShow: '(group_obj.summary_fields.user_capabilities.edit || canAdd)' }, close: { ngClick: 'formCancel()', - ngShow: '!group_obj.summary_fields.user_capabilities.edit' + ngShow: '!(group_obj.summary_fields.user_capabilities.edit || canAdd)' }, save: { ngClick: 'formSave()', ngDisabled: true, - ngShow: 'group_obj.summary_fields.user_capabilities.edit' + ngShow: '(group_obj.summary_fields.user_capabilities.edit || canAdd)' } }, diff --git a/awx/ui/client/src/forms/Hosts.js b/awx/ui/client/src/forms/Hosts.js index 3f01a6cf5c..a1c0e69537 100644 --- a/awx/ui/client/src/forms/Hosts.js +++ b/awx/ui/client/src/forms/Hosts.js @@ -47,14 +47,14 @@ export default dataTitle: 'Host Name', dataPlacement: 'right', dataContainer: 'body', - ngDisabled: '!host.summary_fields.user_capabilities.edit' + ngDisabled: '!(host.summary_fields.user_capabilities.edit || canAdd)' }, description: { label: 'Description', type: 'text', addRequired: false, editRequired: false, - ngDisabled: '!host.summary_fields.user_capabilities.edit' + ngDisabled: '!(host.summary_fields.user_capabilities.edit || canAdd)' }, variables: { label: 'Variables', @@ -85,16 +85,16 @@ export default buttons: { cancel: { ngClick: 'formCancel()', - ngShow: 'host.summary_fields.user_capabilities.edit' + ngShow: '(host.summary_fields.user_capabilities.edit || canAdd)' }, close: { ngClick: 'formCancel()', - ngShow: '!host.summary_fields.user_capabilities.edit' + ngShow: '!(host.summary_fields.user_capabilities.edit || canAdd)' }, save: { ngClick: 'formSave()', ngDisabled: true, - ngShow: 'host.summary_fields.user_capabilities.edit' + ngShow: '(host.summary_fields.user_capabilities.edit || canAdd)' } }, diff --git a/awx/ui/client/src/forms/Inventories.js b/awx/ui/client/src/forms/Inventories.js index 425c4d342d..72852079c3 100644 --- a/awx/ui/client/src/forms/Inventories.js +++ b/awx/ui/client/src/forms/Inventories.js @@ -27,7 +27,7 @@ export default addRequired: true, editRequired: true, capitalize: false, - ngDisabled: '!inventory_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(inventory_obj.summary_fields.user_capabilities.edit || canAdd)' }, inventory_description: { realName: 'description', @@ -35,7 +35,7 @@ export default type: 'text', addRequired: false, editRequired: false, - ngDisabled: '!inventory_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(inventory_obj.summary_fields.user_capabilities.edit || canAdd)' }, organization: { label: 'Organization', @@ -47,7 +47,7 @@ export default reqExpression: "organizationrequired", init: "true" }, - ngDisabled: '!inventory_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(inventory_obj.summary_fields.user_capabilities.edit || canAdd)' }, variables: { label: 'Variables', @@ -67,23 +67,23 @@ export default dataTitle: 'Inventory Variables', dataPlacement: 'right', dataContainer: 'body', - ngDisabled: '!inventory_obj.summary_fields.user_capabilities.edit' // TODO: get working + ngDisabled: '!(inventory_obj.summary_fields.user_capabilities.edit || canAdd)' // TODO: get working } }, buttons: { cancel: { ngClick: 'formCancel()', - ngShow: 'inventory_obj.summary_fields.user_capabilities.edit' + ngShow: '(inventory_obj.summary_fields.user_capabilities.edit || canAdd)' }, close: { ngClick: 'formCancel()', - ngHide: 'inventory_obj.summary_fields.user_capabilities.edit' + ngHide: '(inventory_obj.summary_fields.user_capabilities.edit || canAdd)' }, save: { ngClick: 'formSave()', ngDisabled: true, - ngShow: 'inventory_obj.summary_fields.user_capabilities.edit' + ngShow: '(inventory_obj.summary_fields.user_capabilities.edit || canAdd)' } }, @@ -105,7 +105,7 @@ export default awToolTip: 'Add a permission', actionClass: 'btn List-buttonSubmit', buttonContent: '+ ADD', - ngShow: 'inventory_obj.summary_fields.user_capabilities.edit' + ngShow: '(inventory_obj.summary_fields.user_capabilities.edit || canAdd)' } }, diff --git a/awx/ui/client/src/forms/JobTemplates.js b/awx/ui/client/src/forms/JobTemplates.js index 13e826492d..e9fe0553b8 100644 --- a/awx/ui/client/src/forms/JobTemplates.js +++ b/awx/ui/client/src/forms/JobTemplates.js @@ -28,7 +28,7 @@ export default addRequired: true, editRequired: true, column: 1, - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, description: { label: 'Description', @@ -36,7 +36,7 @@ export default addRequired: false, editRequired: false, column: 1, - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, job_type: { label: 'Job Type', @@ -59,7 +59,7 @@ export default ngShow: "!job_type.value || job_type.value !== 'scan'", text: 'Prompt on launch' }, - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, inventory: { label: 'Inventory', @@ -82,7 +82,7 @@ export default ngShow: "!job_type.value || job_type.value !== 'scan'", text: 'Prompt on launch' }, - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, project: { label: 'Project', @@ -104,13 +104,13 @@ export default dataTitle: 'Project', dataPlacement: 'right', dataContainer: "body", - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, playbook: { label: '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", + ngDisabled: "(job_type.value === 'scan' && project_name === 'Default') || !(job_template_obj.summary_fields.user_capabilities.edit || canAdd)", id: 'playbook-select', awRequiredWhen: { reqExpression: "playbookrequired", @@ -144,7 +144,7 @@ export default variable: 'ask_credential_on_launch', text: 'Prompt on launch' }, - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, cloud_credential: { label: 'Cloud Credential', @@ -160,7 +160,7 @@ export default dataTitle: 'Cloud Credential', dataPlacement: 'right', dataContainer: "body", - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, network_credential: { label: 'Network Credential', @@ -175,7 +175,7 @@ export default dataTitle: 'Network Credential', dataPlacement: 'right', dataContainer: "body", - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, forks: { label: 'Forks', @@ -195,7 +195,7 @@ export default dataTitle: 'Forks', dataPlacement: 'right', dataContainer: "body", - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' // TODO: get working + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' // TODO: get working }, limit: { label: 'Limit', @@ -213,7 +213,7 @@ export default variable: 'ask_limit_on_launch', text: 'Prompt on launch' }, - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, verbosity: { label: 'Verbosity', @@ -227,7 +227,7 @@ export default dataTitle: 'Verbosity', dataPlacement: 'right', dataContainer: "body", - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, job_tags: { label: 'Job Tags', @@ -247,7 +247,7 @@ export default variable: 'ask_tags_on_launch', text: 'Prompt on launch' }, - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, skip_tags: { label: 'Skip Tags', @@ -267,7 +267,7 @@ export default variable: 'ask_skip_tags_on_launch', text: 'Prompt on launch' }, - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, checkbox_group: { label: 'Options', @@ -284,7 +284,7 @@ export default dataTitle: 'Become Privilege Escalation', dataContainer: "body", labelClass: 'stack-inline', - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, { name: 'allow_callbacks', label: 'Allow Provisioning Callbacks', @@ -299,7 +299,7 @@ export default dataTitle: 'Allow Provisioning Callbacks', dataContainer: "body", labelClass: 'stack-inline', - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }] }, callback_url: { @@ -315,7 +315,7 @@ export default dataPlacement: 'top', dataTitle: 'Provisioning Callback URL', dataContainer: "body", - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, host_config_key: { label: 'Host Config Key', @@ -329,7 +329,7 @@ export default dataPlacement: 'right', dataTitle: "Host Config Key", dataContainer: "body", - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, labels: { label: 'Labels', @@ -343,7 +343,7 @@ export default dataPlacement: 'right', awPopOver: "

    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' + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' }, variables: { label: 'Extra Variables', @@ -367,14 +367,14 @@ export default variable: 'ask_variables_on_launch', text: 'Prompt on launch' }, - ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' // TODO: get working + ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)' // TODO: get working } }, buttons: { //for now always generates @@ -80,10 +80,10 @@
    - - - - + + + +