diff --git a/awx/ui/client/src/access/roleList.partial.html b/awx/ui/client/src/access/roleList.partial.html index 1478c9dc37..365a20f061 100644 --- a/awx/ui/client/src/access/roleList.partial.html +++ b/awx/ui/client/src/access/roleList.partial.html @@ -1,13 +1,13 @@
If no organization is given, the credential can only be used by the user that creates the credential. Organization admins and system administrators can assign an organization so that roles for the credential can be assigned to users and teams in that organization.
", dataTitle: 'Organization ', dataPlacement: 'bottom', - dataContainer: "body" + dataContainer: "body", + ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' }, kind: { label: 'Type', @@ -83,7 +86,8 @@ export default dataTitle: 'Type', dataPlacement: 'right', dataContainer: "body", - hasSubForm: true + hasSubForm: true, + ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' }, access_key: { label: 'Access Key', @@ -96,12 +100,13 @@ export default autocomplete: false, apiField: 'username', subForm: 'credentialSubForm', + ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' }, secret_key: { label: 'Secret Key', type: 'sensitive', ngShow: "kind.value == 'aws'", - ngDisabled: "secret_key_ask", + ngDisabled: "secret_key_ask || !credential_obj.summary_fields.user_capabilities.edit", awRequiredWhen: { reqExpression: "aws_required", init: false @@ -123,7 +128,8 @@ export default dataTitle: 'STS Token', dataPlacement: 'right', dataContainer: "body", - subForm: 'credentialSubForm' + subForm: 'credentialSubForm', + ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' }, "host": { labelBind: 'hostLabel', @@ -139,7 +145,8 @@ export default reqExpression: 'host_required', init: false }, - subForm: 'credentialSubForm' + subForm: 'credentialSubForm', + ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' }, "subscription": { label: "Subscription ID", @@ -156,7 +163,8 @@ export default dataTitle: 'Subscription ID', dataPlacement: 'right', dataContainer: "body", - subForm: 'credentialSubForm' + subForm: 'credentialSubForm', + ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' }, "username": { labelBind: 'usernameLabel', @@ -168,7 +176,8 @@ export default init: false }, autocomplete: false, - subForm: "credentialSubForm" + subForm: "credentialSubForm", + ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' }, "email_address": { labelBind: 'usernameLabel', @@ -183,7 +192,8 @@ export default dataTitle: 'Email', dataPlacement: 'right', dataContainer: "body", - subForm: 'credentialSubForm' + subForm: 'credentialSubForm', + ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' }, "api_key": { label: 'API Key', @@ -196,7 +206,8 @@ export default autocomplete: false, hasShowInputButton: true, clear: false, - subForm: 'credentialSubForm' + subForm: 'credentialSubForm', + ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' }, "password": { labelBind: 'passwordLabel', @@ -209,13 +220,14 @@ export default reqExpression: "password_required", init: false }, - subForm: "credentialSubForm" + subForm: "credentialSubForm", + ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' }, "ssh_password": { label: 'Password', type: 'sensitive', ngShow: "kind.value == 'ssh'", - ngDisabled: "ssh_password_ask", + ngDisabled: "ssh_password_ask || !credential_obj.summary_fields.user_capabilities.edit", addRequired: false, editRequired: false, subCheckbox: { @@ -247,7 +259,8 @@ export default dataTitle: 'Private Key', dataPlacement: 'right', dataContainer: "body", - subForm: "credentialSubForm" + subForm: "credentialSubForm", + ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit' }, "ssh_key_unlock": { label: 'Private Key Passphrase', @@ -255,7 +268,7 @@ export default ngShow: "kind.value == 'ssh' || kind.value == 'scm'", addRequired: false, editRequired: false, - ngDisabled: "keyEntered === false || ssh_key_unlock_ask", + ngDisabled: "keyEntered === false || ssh_key_unlock_ask || !credential_obj.summary_fields.user_capabilities.edit", subCheckbox: { variable: 'ssh_key_unlock_ask', ngShow: "kind.value == 'ssh'", @@ -278,7 +291,8 @@ export default "sudo | su | pbrun | pfexec | runas sudo)",
dataPlacement: 'right',
dataContainer: "body",
- subForm: 'credentialSubForm'
+ subForm: 'credentialSubForm',
+ ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit'
},
"become_username": {
labelBind: 'becomeUsernameLabel',
@@ -287,13 +301,14 @@ export default
addRequired: false,
editRequired: false,
autocomplete: false,
- subForm: 'credentialSubForm'
+ subForm: 'credentialSubForm',
+ ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit'
},
"become_password": {
labelBind: 'becomePasswordLabel',
type: 'sensitive',
ngShow: "(kind.value == 'ssh' && (become_method && become_method.value)) ",
- ngDisabled: "become_password_ask",
+ ngDisabled: "become_password_ask || !credential_obj.summary_fields.user_capabilities.edit",
addRequired: false,
editRequired: false,
subCheckbox: {
@@ -309,7 +324,8 @@ export default
type: 'text',
label: 'Client ID',
subForm: 'credentialSubForm',
- ngShow: "kind.value === 'azure_rm'"
+ ngShow: "kind.value === 'azure_rm'",
+ ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit'
},
secret:{
type: 'sensitive',
@@ -317,20 +333,23 @@ export default
autocomplete: false,
label: 'Client Secret',
subForm: 'credentialSubForm',
- ngShow: "kind.value === 'azure_rm'"
+ ngShow: "kind.value === 'azure_rm'",
+ ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit'
},
tenant: {
type: 'text',
label: 'Tenant ID',
subForm: 'credentialSubForm',
- ngShow: "kind.value === 'azure_rm'"
+ ngShow: "kind.value === 'azure_rm'",
+ ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit'
},
authorize: {
label: 'Authorize',
type: 'checkbox',
ngChange: "toggleCallback('host_config_key')",
subForm: 'credentialSubForm',
- ngShow: "kind.value === 'net'"
+ ngShow: "kind.value === 'net'",
+ ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit'
},
authorize_password: {
label: 'Authorize Password',
@@ -339,6 +358,7 @@ export default
autocomplete: false,
subForm: 'credentialSubForm',
ngShow: "authorize && authorize !== 'false'",
+ ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit'
},
"project": {
labelBind: 'projectLabel',
@@ -355,7 +375,8 @@ export default
reqExpression: 'project_required',
init: false
},
- subForm: 'credentialSubForm'
+ subForm: 'credentialSubForm',
+ ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit'
},
"domain": {
labelBind: 'domainLabel',
@@ -371,13 +392,14 @@ export default
dataContainer: "body",
addRequired: false,
editRequired: false,
- subForm: 'credentialSubForm'
+ subForm: 'credentialSubForm',
+ ngDisabled: '!credential_obj.summary_fields.user_capabilities.edit'
},
"vault_password": {
label: "Vault Password",
type: 'sensitive',
ngShow: "kind.value == 'ssh'",
- ngDisabled: "vault_password_ask",
+ ngDisabled: "vault_password_ask || !credential_obj.summary_fields.user_capabilities.edit",
addRequired: false,
editRequired: false,
subCheckbox: {
@@ -394,11 +416,17 @@ export default
buttons: {
cancel: {
ngClick: 'formCancel()',
+ ngShow: 'credential_obj.summary_fields.user_capabilities.edit'
+ },
+ close: {
+ ngClick: 'formCancel()',
+ ngShow: '!credential_obj.summary_fields.user_capabilities.edit'
},
save: {
label: 'Save',
ngClick: 'formSave()', //$scope.function to call on click, optional
- ngDisabled: true //Disable when $pristine or $invalid, optional
+ ngDisabled: true,
+ ngShow: 'credential_obj.summary_fields.user_capabilities.edit' //Disable when $pristine or $invalid, optional
}
},
@@ -421,7 +449,8 @@ export default
label: 'Add',
awToolTip: 'Add a permission',
actionClass: 'btn List-buttonSubmit',
- buttonContent: '+ ADD'
+ buttonContent: '+ ADD',
+ ngShow: 'credential_obj.summary_fields.user_capabilities.edit'
}
},
diff --git a/awx/ui/client/src/forms/Groups.js b/awx/ui/client/src/forms/Groups.js
index e3327d442e..40a5cd3301 100644
--- a/awx/ui/client/src/forms/Groups.js
+++ b/awx/ui/client/src/forms/Groups.js
@@ -26,14 +26,16 @@ export default
type: 'text',
addRequired: true,
editRequired: true,
- tab: 'properties'
+ tab: 'properties',
+ ngDisabled: '!group_obj.summary_fields.user_capabilities.edit'
},
description: {
label: 'Description',
type: 'text',
addRequired: false,
editRequired: false,
- tab: 'properties'
+ tab: 'properties',
+ ngDisabled: '!group_obj.summary_fields.user_capabilities.edit'
},
variables: {
label: 'Variables',
@@ -65,7 +67,8 @@ export default
ngChange: 'sourceChange(source)',
addRequired: false,
editRequired: false,
- ngModel: 'source'
+ ngModel: 'source',
+ ngDisabled: '!group_obj.summary_fields.user_capabilities.edit'
},
credential: {
label: 'Cloud Credential',
@@ -77,7 +80,8 @@ export default
awRequiredWhen: {
reqExpression: "cloudCredentialRequired",
init: "false"
- }
+ },
+ ngDisabled: '!group_obj.summary_fields.user_capabilities.edit'
},
source_regions: {
label: 'Regions',
@@ -92,7 +96,8 @@ export default
awPopOver: "Click on the regions field to see a list of regions for your cloud provider. You can select multiple regions, " + "or choose All to include all regions. Tower will only be updated with Hosts associated with the selected regions." + "
", - dataContainer: 'body' + dataContainer: 'body', + ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' }, instance_filters: { label: 'Instance Filters', @@ -112,7 +117,8 @@ export default "tag:Name=test*\n" + "
View the Describe Instances documentation " + "for a complete list of supported filters.
", - dataContainer: 'body' + dataContainer: 'body', + ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' }, group_by: { label: 'Only Group By', @@ -137,7 +143,8 @@ export default "If blank, all groups above are created except Instance ID.
", - dataContainer: 'body' + dataContainer: 'body', + ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' }, inventory_script: { label : "Custom Inventory Script", @@ -149,6 +156,7 @@ export default addRequired: true, editRequired: true, ngRequired: "source && source.value === 'custom'", + ngDisabled: '!group_obj.summary_fields.user_capabilities.edit', }, custom_variables: { id: 'custom_variables', @@ -269,7 +277,8 @@ export default dataTitle: 'Overwrite', dataContainer: 'body', dataPlacement: 'right', - labelClass: 'checkbox-options' + labelClass: 'checkbox-options', + ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' }, { name: 'overwrite_vars', label: 'Overwrite Variables', @@ -283,7 +292,8 @@ export default dataTitle: 'Overwrite Variables', dataContainer: 'body', dataPlacement: 'right', - labelClass: 'checkbox-options' + labelClass: 'checkbox-options', + ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' }, { name: 'update_on_launch', label: 'Update on Launch', @@ -296,7 +306,8 @@ export default dataTitle: 'Update on Launch', dataContainer: 'body', dataPlacement: 'right', - labelClass: 'checkbox-options' + labelClass: 'checkbox-options', + ngDisabled: '!group_obj.summary_fields.user_capabilities.edit' }] }, update_cache_timeout: { @@ -321,11 +332,17 @@ export default buttons: { cancel: { - ngClick: 'formCancel()' + ngClick: 'formCancel()', + ngShow: 'group_obj.summary_fields.user_capabilities.edit' + }, + close: { + ngClick: 'formCancel()', + ngShow: '!group_obj.summary_fields.user_capabilities.edit' }, save: { ngClick: 'formSave()', - ngDisabled: true + ngDisabled: true, + ngShow: 'group_obj.summary_fields.user_capabilities.edit' } }, diff --git a/awx/ui/client/src/forms/Hosts.js b/awx/ui/client/src/forms/Hosts.js index 0da34d3e2e..3f01a6cf5c 100644 --- a/awx/ui/client/src/forms/Hosts.js +++ b/awx/ui/client/src/forms/Hosts.js @@ -46,13 +46,15 @@ export default "", dataTitle: 'Host Name', dataPlacement: 'right', - dataContainer: 'body' + dataContainer: 'body', + ngDisabled: '!host.summary_fields.user_capabilities.edit' }, description: { label: 'Description', type: 'text', addRequired: false, - editRequired: false + editRequired: false, + ngDisabled: '!host.summary_fields.user_capabilities.edit' }, variables: { label: 'Variables', @@ -83,10 +85,16 @@ export default buttons: { cancel: { ngClick: 'formCancel()', + ngShow: 'host.summary_fields.user_capabilities.edit' + }, + close: { + ngClick: 'formCancel()', + ngShow: '!host.summary_fields.user_capabilities.edit' }, save: { ngClick: 'formSave()', - ngDisabled: true + ngDisabled: true, + ngShow: 'host.summary_fields.user_capabilities.edit' } }, diff --git a/awx/ui/client/src/forms/Inventories.js b/awx/ui/client/src/forms/Inventories.js index 6467bf28d3..425c4d342d 100644 --- a/awx/ui/client/src/forms/Inventories.js +++ b/awx/ui/client/src/forms/Inventories.js @@ -26,14 +26,16 @@ export default type: 'text', addRequired: true, editRequired: true, - capitalize: false + capitalize: false, + ngDisabled: '!inventory_obj.summary_fields.user_capabilities.edit' }, inventory_description: { realName: 'description', label: 'Description', type: 'text', addRequired: false, - editRequired: false + editRequired: false, + ngDisabled: '!inventory_obj.summary_fields.user_capabilities.edit' }, organization: { label: 'Organization', @@ -44,7 +46,8 @@ export default awRequiredWhen: { reqExpression: "organizationrequired", init: "true" - } + }, + ngDisabled: '!inventory_obj.summary_fields.user_capabilities.edit' }, variables: { label: 'Variables', @@ -63,17 +66,24 @@ export default 'View YAML examples at docs.ansible.com
', dataTitle: 'Inventory Variables', dataPlacement: 'right', - dataContainer: 'body' + dataContainer: 'body', + ngDisabled: '!inventory_obj.summary_fields.user_capabilities.edit' // TODO: get working } }, buttons: { cancel: { - ngClick: 'formCancel()' + ngClick: 'formCancel()', + ngShow: 'inventory_obj.summary_fields.user_capabilities.edit' + }, + close: { + ngClick: 'formCancel()', + ngHide: 'inventory_obj.summary_fields.user_capabilities.edit' }, save: { ngClick: 'formSave()', - ngDisabled: true + ngDisabled: true, + ngShow: 'inventory_obj.summary_fields.user_capabilities.edit' } }, @@ -94,7 +104,8 @@ export default label: 'Add', awToolTip: 'Add a permission', actionClass: 'btn List-buttonSubmit', - buttonContent: '+ ADD' + buttonContent: '+ ADD', + ngShow: 'inventory_obj.summary_fields.user_capabilities.edit' } }, diff --git a/awx/ui/client/src/forms/JobTemplates.js b/awx/ui/client/src/forms/JobTemplates.js index 5d56907c88..13e826492d 100644 --- a/awx/ui/client/src/forms/JobTemplates.js +++ b/awx/ui/client/src/forms/JobTemplates.js @@ -27,14 +27,16 @@ export default type: 'text', addRequired: true, editRequired: true, - column: 1 + column: 1, + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, description: { label: 'Description', type: 'text', addRequired: false, editRequired: false, - column: 1 + column: 1, + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, job_type: { label: 'Job Type', @@ -56,7 +58,8 @@ export default variable: 'ask_job_type_on_launch', ngShow: "!job_type.value || job_type.value !== 'scan'", text: 'Prompt on launch' - } + }, + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, inventory: { label: 'Inventory', @@ -78,7 +81,8 @@ export default variable: 'ask_inventory_on_launch', ngShow: "!job_type.value || job_type.value !== 'scan'", text: 'Prompt on launch' - } + }, + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, project: { label: 'Project', @@ -100,12 +104,13 @@ export default dataTitle: 'Project', dataPlacement: 'right', dataContainer: "body", + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, playbook: { label: 'Playbook', type:'select', ngOptions: 'book for book in playbook_options track by book', - ngDisabled: "job_type.value === 'scan' && project_name === 'Default'", + ngDisabled: "(job_type.value === 'scan' && project_name === 'Default') || !job_template_obj.summary_fields.user_capabilities.edit", id: 'playbook-select', awRequiredWhen: { reqExpression: "playbookrequired", @@ -138,7 +143,8 @@ export default subCheckbox: { variable: 'ask_credential_on_launch', text: 'Prompt on launch' - } + }, + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, cloud_credential: { label: 'Cloud Credential', @@ -153,7 +159,8 @@ export default "running playbook, allowing provisioning into the cloud without manually passing parameters to the included modules.", dataTitle: 'Cloud Credential', dataPlacement: 'right', - dataContainer: "body" + dataContainer: "body", + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, network_credential: { label: 'Network Credential', @@ -167,7 +174,8 @@ export default awPopOver: "Network credentials are used by Ansible networking modules to connect to and manage networking devices.
", dataTitle: 'Network Credential', dataPlacement: 'right', - dataContainer: "body" + dataContainer: "body", + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, forks: { label: 'Forks', @@ -186,7 +194,8 @@ export default ' target=\"_blank\">ansible configuration file.', dataTitle: 'Forks', dataPlacement: 'right', - dataContainer: "body" + dataContainer: "body", + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' // TODO: get working }, limit: { label: 'Limit', @@ -203,7 +212,8 @@ export default subCheckbox: { variable: 'ask_limit_on_launch', text: 'Prompt on launch' - } + }, + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, verbosity: { label: 'Verbosity', @@ -216,7 +226,8 @@ export default awPopOver: "Control the level of output ansible will produce as the playbook executes.
", dataTitle: 'Verbosity', dataPlacement: 'right', - dataContainer: "body" + dataContainer: "body", + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, job_tags: { label: 'Job Tags', @@ -235,7 +246,8 @@ export default subCheckbox: { variable: 'ask_tags_on_launch', text: 'Prompt on launch' - } + }, + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, skip_tags: { label: 'Skip Tags', @@ -254,7 +266,8 @@ export default subCheckbox: { variable: 'ask_skip_tags_on_launch', text: 'Prompt on launch' - } + }, + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, checkbox_group: { label: 'Options', @@ -270,7 +283,8 @@ export default dataPlacement: 'right', dataTitle: 'Become Privilege Escalation', dataContainer: "body", - labelClass: 'stack-inline' + labelClass: 'stack-inline', + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, { name: 'allow_callbacks', label: 'Allow Provisioning Callbacks', @@ -284,7 +298,8 @@ export default dataPlacement: 'right', dataTitle: 'Allow Provisioning Callbacks', dataContainer: "body", - labelClass: 'stack-inline' + labelClass: 'stack-inline', + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }] }, callback_url: { @@ -299,7 +314,8 @@ export default awPopOverWatch: "callback_help", dataPlacement: 'top', dataTitle: 'Provisioning Callback URL', - dataContainer: "body" + dataContainer: "body", + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, host_config_key: { label: 'Host Config Key', @@ -312,7 +328,8 @@ export default awPopOverWatch: "callback_help", dataPlacement: 'right', dataTitle: "Host Config Key", - dataContainer: "body" + dataContainer: "body", + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, labels: { label: 'Labels', @@ -325,7 +342,8 @@ export default dataTitle: 'Labels', 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' + dataContainer: 'body', + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' }, variables: { label: 'Extra Variables', @@ -348,14 +366,15 @@ export default subCheckbox: { variable: 'ask_variables_on_launch', text: 'Prompt on launch' - } + }, + ngDisabled: '!job_template_obj.summary_fields.user_capabilities.edit' // TODO: get working } }, buttons: { //for now always generates