diff --git a/awx/ui/client/src/inventories-hosts/inventories/insights/insights.controller.js b/awx/ui/client/src/inventories-hosts/inventories/insights/insights.controller.js index 0e143d0b35..5022fc519d 100644 --- a/awx/ui/client/src/inventories-hosts/inventories/insights/insights.controller.js +++ b/awx/ui/client/src/inventories-hosts/inventories/insights/insights.controller.js @@ -5,8 +5,9 @@ *************************************************/ export default [ 'InsightsData', '$scope', 'moment', '$state', 'InventoryData', - 'InsightsService', -function (data, $scope, moment, $state, InventoryData, InsightsService) { + 'InsightsService', 'CanRemediate', +function (data, $scope, moment, $state, InventoryData, InsightsService, + CanRemediate) { function init() { $scope.reports = (data && data.reports) ? data.reports : []; @@ -24,7 +25,7 @@ function (data, $scope, moment, $state, InventoryData, InsightsService) { $scope.insights_credential = (InventoryData && InventoryData.summary_fields && InventoryData.summary_fields.insights_credential && InventoryData.summary_fields.insights_credential.id) ? InventoryData.summary_fields.insights_credential.id : null; - + $scope.canRemediate = CanRemediate; } function filter(str){ diff --git a/awx/ui/client/src/inventories-hosts/inventories/insights/insights.partial.html b/awx/ui/client/src/inventories-hosts/inventories/insights/insights.partial.html index d82a010092..986decd7b2 100644 --- a/awx/ui/client/src/inventories-hosts/inventories/insights/insights.partial.html +++ b/awx/ui/client/src/inventories-hosts/inventories/insights/insights.partial.html @@ -88,6 +88,6 @@
- +
diff --git a/awx/ui/client/src/inventories-hosts/inventories/insights/insights.route.js b/awx/ui/client/src/inventories-hosts/inventories/insights/insights.route.js index 179af657af..cd116fa062 100644 --- a/awx/ui/client/src/inventories-hosts/inventories/insights/insights.route.js +++ b/awx/ui/client/src/inventories-hosts/inventories/insights/insights.route.js @@ -49,6 +49,50 @@ export default { return resourceData.data; } } - ] + ], + checkProjectPermission: ['InventoryData', '$stateParams', 'Rest', 'GetBasePath', + function(InventoryData, $stateParams, Rest, GetBasePath){ + if(_.has(InventoryData, 'summary_fields.insights_credential')){ + let credential_id = InventoryData.summary_fields.insights_credential.id, + path = `${GetBasePath('projects')}?credential__id=${credential_id}&role_level=use_role`; + Rest.setUrl(path); + return Rest.get().then(({data}) => { + if (data.results.length > 0){ + return true; + } + else { + return false; + } + }).catch(() => { + return false; + }); + } + else { + return false; + } + }], + checkInventoryPermission: ['InventoryData', '$stateParams', 'Rest', 'GetBasePath', + function(InventoryData, $stateParams, Rest, GetBasePath){ + if(_.has(InventoryData, 'summary_fields.insights_credential')){ + let path = `${GetBasePath('inventory')}${InventoryData.id}/?role_level=use_role`; + Rest.setUrl(path); + return Rest.get().then(() => { + return true; + }).catch(() => { + return false; + }); + } + else { + return false; + } + }], + CanRemediate: ['checkProjectPermission', 'checkInventoryPermission', + function(checkProjectPermission, checkInventoryPermission){ + // the user can remediate an insights + // inv if the user has "use" permission on + // an insights project and the inventory + // being edited: + return checkProjectPermission === true && checkInventoryPermission === true; + }] } };