From 71fefc42a53ec0920b81ab0795cba2ca47a22f53 Mon Sep 17 00:00:00 2001 From: Jared Tabor Date: Mon, 31 Jul 2017 13:56:16 -0700 Subject: [PATCH] creating CanRemdiate flag for permissions to remediate an inventory --- .../src/inventories-hosts/inventories/main.js | 32 ++++++++++++++++++- .../edit/inventory-edit.controller.js | 4 ++- .../standard-inventory/inventory.form.js | 2 +- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/awx/ui/client/src/inventories-hosts/inventories/main.js b/awx/ui/client/src/inventories-hosts/inventories/main.js index 22c8c773e5..6af683753a 100644 --- a/awx/ui/client/src/inventories-hosts/inventories/main.js +++ b/awx/ui/client/src/inventories-hosts/inventories/main.js @@ -123,8 +123,38 @@ angular.module('inventory', [ 'status: ' + status }); }); + }], + CanRemediate: ['resourceData', '$stateParams', 'Rest', 'GetBasePath', 'ProcessErrors', + function(resourceData, $stateParams, Rest, GetBasePath, ProcessErrors){ + if(_.has(resourceData, 'data.summary_fields.insights_credential')){ + let credential_id = resourceData.data.summary_fields.insights_credential.id, + path = `${GetBasePath('projects')}?credential__id=${credential_id}`; + Rest.setUrl(path); + return Rest.get() + .then(({data}) => { + if (data.results.length > 0 && + _.has(data, 'results[0].summary_fields.user_capabilities.edit')) { + return data.results[0].summary_fields.user_capabilities.edit; + } + else { + return false; + } + }) + .catch(({data, status}) => { + ProcessErrors(null, data, status, null, { + hdr: 'Error!', + msg: 'Failed to get instance groups. GET returned ' + + 'status: ' + status + }); + }); + } + else { + return false; + } + }] - } + }, + } }); diff --git a/awx/ui/client/src/inventories-hosts/inventories/standard-inventory/edit/inventory-edit.controller.js b/awx/ui/client/src/inventories-hosts/inventories/standard-inventory/edit/inventory-edit.controller.js index 2af0a612b0..0c003841ed 100644 --- a/awx/ui/client/src/inventories-hosts/inventories/standard-inventory/edit/inventory-edit.controller.js +++ b/awx/ui/client/src/inventories-hosts/inventories/standard-inventory/edit/inventory-edit.controller.js @@ -13,7 +13,8 @@ function InventoriesEdit($scope, $location, $stateParams, InventoryForm, Rest, ProcessErrors, GetBasePath, ParseTypeChange, Wait, ToJSON, - ParseVariableString, $state, OrgAdminLookup, $rootScope, resourceData, CreateSelect2, InstanceGroupsService, InstanceGroupsData) { + ParseVariableString, $state, OrgAdminLookup, $rootScope, resourceData, + CreateSelect2, InstanceGroupsService, InstanceGroupsData, CanRemediate) { // Inject dynamic view let defaultUrl = GetBasePath('inventory'), @@ -37,6 +38,7 @@ function InventoriesEdit($scope, $location, $scope.inventory_variables = inventoryData.variables === null || inventoryData.variables === '' ? '---' : ParseVariableString(inventoryData.variables); $scope.parseType = 'yaml'; $scope.instance_groups = InstanceGroupsData; + $scope.canRemediate = CanRemediate; $rootScope.$on('$stateChangeSuccess', function(event, toState) { if(toState.name === 'inventories.edit') { diff --git a/awx/ui/client/src/inventories-hosts/inventories/standard-inventory/inventory.form.js b/awx/ui/client/src/inventories-hosts/inventories/standard-inventory/inventory.form.js index 186e44abf0..fa4ed8d106 100644 --- a/awx/ui/client/src/inventories-hosts/inventories/standard-inventory/inventory.form.js +++ b/awx/ui/client/src/inventories-hosts/inventories/standard-inventory/inventory.form.js @@ -201,7 +201,7 @@ function(i18n, InventoryCompletedJobsList) { relatedButtons: { remediate_inventory: { ngClick: 'remediateInventory(id, insights_credential)', - ngShow: 'is_insights && mode !== "add" && canEditOrg', + ngShow: 'is_insights && mode !== "add" && canRemediate', label: i18n._('Remediate Inventory'), class: 'Form-primaryButton' }