More fixes for JT admin edit use cases

Signed-off-by: mabashian <mabashia@redhat.com>
This commit is contained in:
mabashian
2017-09-13 16:48:04 -04:00
parent 28fa5077d5
commit f90771ee1a
5 changed files with 17 additions and 14 deletions

View File

@@ -37,8 +37,7 @@
$scope.mode = "add"; $scope.mode = "add";
$scope.parseType = 'yaml'; $scope.parseType = 'yaml';
$scope.credentialNotPresent = false; $scope.credentialNotPresent = false;
$scope.canChangeProject = true; $scope.canGetAllRelatedResources = true;
$scope.canChangeInventory = true;
md5Setup({ md5Setup({
scope: $scope, scope: $scope,

View File

@@ -18,7 +18,7 @@ export default
'Empty', 'Prompt', 'ToJSON', 'GetChoices', 'CallbackHelpInit', 'Empty', 'Prompt', 'ToJSON', 'GetChoices', 'CallbackHelpInit',
'InitiatePlaybookRun' , 'initSurvey', '$state', 'CreateSelect2', 'InitiatePlaybookRun' , 'initSurvey', '$state', 'CreateSelect2',
'ToggleNotification','$q', 'InstanceGroupsService', 'InstanceGroupsData', 'MultiCredentialService', 'availableLabels', 'ToggleNotification','$q', 'InstanceGroupsService', 'InstanceGroupsData', 'MultiCredentialService', 'availableLabels',
'canChangeProject', 'canChangeInventory', 'jobTemplateData', 'ParseVariableString', 'canGetProject', 'canGetInventory', 'jobTemplateData', 'ParseVariableString',
function( function(
$filter, $scope, $rootScope, $filter, $scope, $rootScope,
$location, $stateParams, JobTemplateForm, GenerateForm, Rest, Alert, $location, $stateParams, JobTemplateForm, GenerateForm, Rest, Alert,
@@ -26,7 +26,7 @@ export default
ParseTypeChange, Wait, selectedLabels, i18n, ParseTypeChange, Wait, selectedLabels, i18n,
Empty, Prompt, ToJSON, GetChoices, CallbackHelpInit, InitiatePlaybookRun, SurveyControllerInit, $state, Empty, Prompt, ToJSON, GetChoices, CallbackHelpInit, InitiatePlaybookRun, SurveyControllerInit, $state,
CreateSelect2, ToggleNotification, $q, InstanceGroupsService, InstanceGroupsData, MultiCredentialService, availableLabels, CreateSelect2, ToggleNotification, $q, InstanceGroupsService, InstanceGroupsData, MultiCredentialService, availableLabels,
canChangeProject, canChangeInventory, jobTemplateData, ParseVariableString canGetProject, canGetInventory, jobTemplateData, ParseVariableString
) { ) {
$scope.$watch('job_template_obj.summary_fields.user_capabilities.edit', function(val) { $scope.$watch('job_template_obj.summary_fields.user_capabilities.edit', function(val) {
@@ -60,8 +60,6 @@ export default
$scope.surveyTooltip = i18n._('Surveys allow users to be prompted at job launch with a series of questions related to the job. This allows for variables to be defined that affect the playbook run at time of launch.'); $scope.surveyTooltip = i18n._('Surveys allow users to be prompted at job launch with a series of questions related to the job. This allows for variables to be defined that affect the playbook run at time of launch.');
$scope.job_tag_options = []; $scope.job_tag_options = [];
$scope.skip_tag_options = []; $scope.skip_tag_options = [];
$scope.canChangeProject = canChangeProject;
$scope.canChangeInventory = canChangeInventory;
SurveyControllerInit({ SurveyControllerInit({
scope: $scope, scope: $scope,
@@ -361,7 +359,8 @@ export default
if($scope.job_template_obj.summary_fields.user_capabilities.edit) { if($scope.job_template_obj.summary_fields.user_capabilities.edit) {
MultiCredentialService.loadCredentials(jobTemplateData) MultiCredentialService.loadCredentials(jobTemplateData)
.then(([selectedCredentials, credTypes, credTypeOptions, .then(([selectedCredentials, credTypes, credTypeOptions,
credTags]) => { credTags, credentialGetPermissionDenied]) => {
$scope.canGetAllRelatedResources = canGetProject && canGetInventory && !credentialGetPermissionDenied ? true : false;
$scope.selectedCredentials = selectedCredentials; $scope.selectedCredentials = selectedCredentials;
$scope.credential_types = credTypes; $scope.credential_types = credTypes;
$scope.credentialTypeOptions = credTypeOptions; $scope.credentialTypeOptions = credTypeOptions;

View File

@@ -85,7 +85,7 @@ function(NotificationsList, CompletedJobsList, i18n) {
ngChange: 'job_template_form.inventory_name.$validate()', ngChange: 'job_template_form.inventory_name.$validate()',
text: i18n._('Prompt on launch') text: i18n._('Prompt on launch')
}, },
ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate) || !canChangeInventory' ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate) || !canGetAllRelatedResources'
}, },
project: { project: {
label: i18n._('Project'), label: i18n._('Project'),
@@ -100,14 +100,14 @@ function(NotificationsList, CompletedJobsList, i18n) {
dataTitle: i18n._('Project'), dataTitle: i18n._('Project'),
dataPlacement: 'right', dataPlacement: 'right',
dataContainer: "body", dataContainer: "body",
ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate) || !canChangeProject', ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate) || !canGetAllRelatedResources',
awLookupWhen: 'canChangeProject' awLookupWhen: 'canGetAllRelatedResources'
}, },
playbook: { playbook: {
label: i18n._('Playbook'), label: i18n._('Playbook'),
type:'select', type:'select',
ngOptions: 'book for book in playbook_options track by book', ngOptions: 'book for book in playbook_options track by book',
ngDisabled: "!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate) || !canChangeProject", ngDisabled: "!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate) || !canGetAllRelatedResources",
id: 'playbook-select', id: 'playbook-select',
required: true, required: true,
column: 1, column: 1,

View File

@@ -179,6 +179,8 @@ export default ['Rest', 'ProcessErrors', '$q', 'GetBasePath', function(Rest, Pro
let credDefers = []; let credDefers = [];
let job_template_obj = data; let job_template_obj = data;
let credentialGetPermissionDenied = false;
// get machine credential // get machine credential
if (data.related.credential) { if (data.related.credential) {
Rest.setUrl(data.related.credential); Rest.setUrl(data.related.credential);
@@ -189,6 +191,7 @@ export default ['Rest', 'ProcessErrors', '$q', 'GetBasePath', function(Rest, Pro
.catch(({data, status}) => { .catch(({data, status}) => {
if (status === 403) { if (status === 403) {
/* User doesn't have read access to the machine credential, so use summary_fields */ /* User doesn't have read access to the machine credential, so use summary_fields */
credentialGetPermissionDenied = true;
selectedCredentials.machine = job_template_obj.summary_fields.credential; selectedCredentials.machine = job_template_obj.summary_fields.credential;
selectedCredentials.machine.credential_type = job_template_obj.summary_fields.credential.credential_type_id; selectedCredentials.machine.credential_type = job_template_obj.summary_fields.credential.credential_type_id;
selectedCredentials.machine.readOnly = true; selectedCredentials.machine.readOnly = true;
@@ -214,6 +217,7 @@ export default ['Rest', 'ProcessErrors', '$q', 'GetBasePath', function(Rest, Pro
.catch(({data, status}) => { .catch(({data, status}) => {
if (status === 403) { if (status === 403) {
/* User doesn't have read access to the vault credential, so use summary_fields */ /* User doesn't have read access to the vault credential, so use summary_fields */
credentialGetPermissionDenied = true;
selectedCredentials.vault = job_template_obj.summary_fields.vault_credential; selectedCredentials.vault = job_template_obj.summary_fields.vault_credential;
selectedCredentials.vault.credential_type = job_template_obj.summary_fields.vault_credential.credential_type_id; selectedCredentials.vault.credential_type = job_template_obj.summary_fields.vault_credential.credential_type_id;
selectedCredentials.vault.readOnly = true; selectedCredentials.vault.readOnly = true;
@@ -240,6 +244,7 @@ export default ['Rest', 'ProcessErrors', '$q', 'GetBasePath', function(Rest, Pro
.catch(({data, status}) => { .catch(({data, status}) => {
if (status === 403) { if (status === 403) {
/* User doesn't have read access to the extra credentials, so use summary_fields */ /* User doesn't have read access to the extra credentials, so use summary_fields */
credentialGetPermissionDenied = true;
selectedCredentials.extra = job_template_obj.summary_fields.extra_credentials; selectedCredentials.extra = job_template_obj.summary_fields.extra_credentials;
_.map(selectedCredentials.extra, (cred) => { _.map(selectedCredentials.extra, (cred) => {
cred.credential_type = cred.credential_type_id; cred.credential_type = cred.credential_type_id;
@@ -271,7 +276,7 @@ export default ['Rest', 'ProcessErrors', '$q', 'GetBasePath', function(Rest, Pro
.updateCredentialTags(selectedCredentials, credTypeOptions); .updateCredentialTags(selectedCredentials, credTypeOptions);
return [selectedCredentials, credTypes, credTypeOptions, return [selectedCredentials, credTypes, credTypeOptions,
credTags]; credTags, credentialGetPermissionDenied];
}); });
}; };

View File

@@ -150,7 +150,7 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
}); });
}); });
}], }],
canChangeProject: ['Rest', 'ProcessErrors', 'jobTemplateData', canGetProject: ['Rest', 'ProcessErrors', 'jobTemplateData',
function(Rest, ProcessErrors, jobTemplateData) { function(Rest, ProcessErrors, jobTemplateData) {
Rest.setUrl(jobTemplateData.related.project); Rest.setUrl(jobTemplateData.related.project);
return Rest.get() return Rest.get()
@@ -171,7 +171,7 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
return false; return false;
}); });
}], }],
canChangeInventory: ['Rest', 'ProcessErrors', 'jobTemplateData', canGetInventory: ['Rest', 'ProcessErrors', 'jobTemplateData',
function(Rest, ProcessErrors, jobTemplateData) { function(Rest, ProcessErrors, jobTemplateData) {
Rest.setUrl(jobTemplateData.related.inventory); Rest.setUrl(jobTemplateData.related.inventory);
return Rest.get() return Rest.get()