Added auditor notification bar within CTinT, restrict updates, removed License field

This commit is contained in:
Ken Hoes 2016-12-07 13:09:58 -05:00
parent eb3606e9fc
commit 1bdebb84fa
12 changed files with 123 additions and 36 deletions

View File

@ -136,7 +136,6 @@ export default [
}, ];
var forms = _.pluck(authForms, 'formDef');
_.each(forms, function(form) {
var keys = _.keys(form.fields);
_.each(keys, function(key) {
@ -154,6 +153,8 @@ export default [
}
addFieldInfo(form, key);
});
// Disable the save button for non-superusers
form.buttons.save.disabled = 'vm.updateProhibited';
});
function addFieldInfo(form, key) {
@ -165,7 +166,7 @@ export default [
dataPlacement: 'top',
placeholder: ConfigurationUtils.formatPlaceholder($scope.$parent.configDataResolve[key].placeholder, key) || null,
dataTitle: $scope.$parent.configDataResolve[key].label,
required: $scope.$parent.configDataResolve[key].required
required: $scope.$parent.configDataResolve[key].required,
});
}

View File

@ -1,4 +1,5 @@
@import "./client/src/shared/branding/colors.default.less";
@import "../shared/branding/colors.less";
.Form-resetValue, .Form-resetFile {
text-transform: uppercase;
@ -49,3 +50,24 @@ input#filePickerText {
border-radius: 0 5px 5px 0;
background-color: #fff;
}
// Messagebar for system auditor role notifications
.Section-messageBar {
width: 120%;
margin-left: -20px;
padding: 10px;
color: @white;
background-color: @default-link;
}
.Section-messageBar--close {
position: absolute;
right: 0;
background: none;
border: none;
color: @info-close;
}
.Section-messageBar--close:hover {
color: @white;
}

View File

@ -425,16 +425,58 @@ export default [
triggerModal(msg, title, buttons);
};
var show_auditor_bar;
if($rootScope.user_is_system_auditor && Store('show_auditor_bar') !== false) {
show_auditor_bar = true;
} else {
show_auditor_bar = false;
}
var updateMessageBarPrefs = function() {
vm.show_auditor_bar = false;
Store('show_auditor_bar', vm.show_auditor_bar);
};
var closeMessageBar = function() {
var msg = 'Are you sure you want to hide the notification bar?';
var title = 'Warning: Closing notification bar';
var buttons = [{
label: "Cancel",
"class": "btn Form-cancelButton",
"id": "formmodal-cancel-button",
onClick: function() {
$('#FormModal-dialog').dialog('close');
}
}, {
label: "OK",
onClick: function() {
$('#FormModal-dialog').dialog('close');
updateMessageBarPrefs();
},
"class": "btn btn-primary",
"id": "formmodal-save-button"
}];
triggerModal(msg, title, buttons);
};
var updateProhibited = true;
if($rootScope.user_is_superuser) {
updateProhibited = false;
}
angular.extend(vm, {
activeTab: activeTab,
activeTabCheck: activeTabCheck,
closeMessageBar: closeMessageBar,
currentForm: currentForm,
formCancel: formCancel,
formTracker: formTracker,
formSave: formSave,
populateFromApi: populateFromApi,
resetAllConfirm: resetAllConfirm,
triggerModal: triggerModal
show_auditor_bar: show_auditor_bar,
triggerModal: triggerModal,
updateProhibited: updateProhibited
});
}
];

View File

@ -1,3 +1,9 @@
<div class="Section-messageBar" ng-if="vm.show_auditor_bar">
<i class="fa fa-warning"></i>
System auditors have read-only permissions in this section.
<button class="Section-messageBar--close" ng-click="vm.closeMessageBar()"><i class="fa fa-times-circle"></i></button>
</div>
<div class="tab-pane" id="configuration-panel">
<div ng-cloak id="htmlTemplate" class="Panel">
<div class="Form-header">

View File

@ -4,19 +4,27 @@
* All Rights Reserved
*************************************************/
export default ['GetBasePath', 'ProcessErrors', '$q', '$http', 'Rest',
function(GetBasePath, ProcessErrors, $q, $http, Rest) {
export default ['$rootScope', 'GetBasePath', 'ProcessErrors', '$q', '$http', 'Rest',
function($rootScope, GetBasePath, ProcessErrors, $q, $http, Rest) {
var url = GetBasePath('settings');
return {
getConfigurationOptions: function() {
var deferred = $q.defer();
var returnData;
Rest.setUrl(url + '/all');
Rest.options()
.success(function(data) {
var returnData = data.actions.PUT;
if($rootScope.is_superuser) {
returnData = data.actions.PUT;
} else {
returnData = data.actions.GET;
}
//LICENSE is read only, returning here explicitly for display
returnData.LICENSE = data.actions.GET.LICENSE;
// Removing LICENSE display until 3.2 or later
//returnData.LICENSE = data.actions.GET.LICENSE;
deferred.resolve(returnData);
})
.error(function(error) {

View File

@ -34,6 +34,9 @@ export default [
value: command
});
});
// Disable the save button for non-superusers
form.buttons.save.disabled = 'vm.updateProhibited';
var keys = _.keys(form.fields);
_.each(keys, function(key) {

View File

@ -18,6 +18,9 @@ export default [
addFieldInfo(form, key);
});
// Disable the save button for non-superusers
form.buttons.save.disabled = 'vm.updateProhibited';
function addFieldInfo(form, key) {
_.extend(form.fields[key], {
awPopOver: $scope.$parent.configDataResolve[key].help_text,
@ -39,27 +42,14 @@ export default [
$scope.$on('populated', function() {
// var fld = 'LICENSE';
// var readOnly = true;
// $scope.$parent[fld + 'codeMirror'] = AngularCodeMirror(readOnly);
// $scope.$parent[fld + 'codeMirror'].addModes($AnsibleConfig.variable_edit_modes);
// $scope.$parent[fld + 'codeMirror'].showTextArea({
// $scope.$parent.parseType = 'json';
// ParseTypeChange({
// scope: $scope.$parent,
// model: fld,
// element: "configuration_system_template_LICENSE",
// lineNumbers: true,
// mode: 'json',
// variable: 'LICENSE',
// parse_variable: 'parseType',
// field_id: 'configuration_system_template_LICENSE',
// readOnly: true
// });
$scope.$parent.parseType = 'json';
ParseTypeChange({
scope: $scope.$parent,
variable: 'LICENSE',
parse_variable: 'parseType',
field_id: 'configuration_system_template_LICENSE',
readOnly: true
});
});
angular.extend(systemVm, {

View File

@ -27,12 +27,12 @@ export default function() {
ORG_ADMINS_CAN_SEE_ALL_USERS: {
type: 'toggleSwitch',
},
LICENSE: {
type: 'textarea',
rows: 6,
codeMirror: true,
class: 'Form-textAreaLabel Form-formGroup--fullWidth'
}
// LICENSE: {
// type: 'textarea',
// rows: 6,
// codeMirror: true,
// class: 'Form-textAreaLabel Form-formGroup--fullWidth'
// }
},
buttons: {

View File

@ -43,6 +43,9 @@
addFieldInfo(form, key);
});
// Disable the save button for non-superusers
form.buttons.save.disabled = 'vm.updateProhibited';
function addFieldInfo(form, key) {
_.extend(form.fields[key], {
awPopOver: $scope.$parent.configDataResolve[key].help_text,

View File

@ -49,7 +49,7 @@
View and edit your license information.
</p>
</a>
<a ui-sref="configuration" class="SetupItem">
<a ui-sref="configuration" class="SetupItem" ng-if="user_is_superuser || user_is_system_auditor">
<h4 class="SetupItem-title">Configure Tower</h4>
<p class="SetupItem-description">
Edit Tower's configuration.

View File

@ -11,6 +11,7 @@
@info: #d9edf7; /* alert info background color */
@info-border: #bce8f1; /* alert info border color */
@info-color: #3a87ad;
@info-close: #ccdeed;
@unreachable: #FF0000;
@changed: #FF9900; // Ansible Changed
@skipped: #2dbaba; // Ansible Skipped

View File

@ -1733,15 +1733,26 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat
if (btn !== 'reset') {
//html += "ng-disabled=\"" + this.form.name + "_form.$pristine || " + this.form.name + "_form.$invalid";
html += "ng-disabled=\"" + ngDisabled;
//html += (this.form.allowReadonly) ? " || " + this.form.name + "ReadOnly == true" : "";
html += "\" ";
if (button.disabled && button.disable !== true) {
// Allow disabled to overrule ng-disabled. Used for permissions.
// Example: system auditor can view but not update. Form validity
// is no longer a concern but ng-disabled will update disabled
// status on render so we stop applying it here.
} else {
html += "ng-disabled=\"" + ngDisabled;
//html += (this.form.allowReadonly) ? " || " + this.form.name + "ReadOnly == true" : "";
html += "\" ";
}
} else {
//html += "ng-disabled=\"" + this.form.name + "_form.$pristine";
//html += (this.form.allowReadonly) ? " || " + this.form.name + "ReadOnly == true" : "";
//html += "\" ";
}
}
if (button.disabled && button.disable !== true) {
html += ` disabled="disabled" `;
}
if(button.awToolTip) {
html += " aw-tool-tip='" + button.awToolTip + "' data-placement='" + button.dataPlacement + "' data-tip-watch='" + button.dataTipWatch + "'";
}