mirror of
https://github.com/ansible/awx.git
synced 2026-01-29 23:34:42 -03:30
Add radio button support to form-generator. Created permission list and permission add form. Form is currently accessible from User tab.
This commit is contained in:
parent
13b8b68449
commit
7943134168
@ -45,6 +45,7 @@ angular.module('ansible', [
|
||||
'JobTemplateHelper',
|
||||
'ProjectsListDefinition',
|
||||
'ProjectFormDefinition',
|
||||
'PermissionFormDefinition',
|
||||
'JobsListDefinition',
|
||||
'JobFormDefinition',
|
||||
'JobEventsListDefinition',
|
||||
@ -171,8 +172,11 @@ angular.module('ansible', [
|
||||
when('/users/:user_id', { templateUrl: urlPrefix + 'partials/users.html',
|
||||
controller: UsersEdit }).
|
||||
|
||||
when('/users/:user_id/credentials', { templateUrl: urlPrefix + 'partials/teams.html',
|
||||
controller: CredentialsList }).
|
||||
when('/users/:user_id/credentials', { templateUrl: urlPrefix + 'partials/users.html',
|
||||
controller: CredentialsList }).
|
||||
|
||||
when('/users/:user_id/permissions/add', { templateUrl: urlPrefix + 'partials/users.html',
|
||||
controller: PermissionsAdd }).
|
||||
|
||||
when('/users/:user_id/credentials/add', { templateUrl: urlPrefix + 'partials/teams.html',
|
||||
controller: CredentialsAdd }).
|
||||
|
||||
72
awx/ui/static/js/controllers/Permissions.js
Normal file
72
awx/ui/static/js/controllers/Permissions.js
Normal file
@ -0,0 +1,72 @@
|
||||
function PermissionsAdd ($scope, $rootScope, $compile, $location, $log, $routeParams, PermissionsForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, ClearScope,
|
||||
GetBasePath, ReturnToCaller, InventoryList, ProjectList, LookUpInit)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
// Inject dynamic view
|
||||
var form = PermissionsForm;
|
||||
var generator = GenerateForm;
|
||||
var id = $routeParams.user_id;
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var defaultUrl = GetBasePath(base) + id + '/permissions';
|
||||
var scope = generator.inject(form, {mode: 'add', related: false});
|
||||
var master = {};
|
||||
|
||||
generator.reset();
|
||||
LoadBreadCrumbs();
|
||||
|
||||
scope.category = 'i';
|
||||
master.category = 'i';
|
||||
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: null,
|
||||
list: InventoryList,
|
||||
field: 'inventory'
|
||||
});
|
||||
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: null,
|
||||
list: ProjectList,
|
||||
field: 'project'
|
||||
});
|
||||
|
||||
// Save
|
||||
scope.formSave = function() {
|
||||
var data = {};
|
||||
for (var fld in form.fields) {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
var url = (base == 'teams') ? GetBasePath('teams') + id + '/permissions/' : GetBasePath('users') + id + '/permissions/';
|
||||
Rest.setUrl(url);
|
||||
Rest.post(data)
|
||||
.success( function(data, status, headers, config) {
|
||||
ReturnToCaller(1);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, ProjectsForm,
|
||||
{ hdr: 'Error!', msg: 'Failed to create new permission. Post returned status: ' + status });
|
||||
});
|
||||
};
|
||||
|
||||
// Cancel
|
||||
scope.formReset = function() {
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
for (var fld in master) {
|
||||
scope[fld] = master[fld];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
ProjectsAdd.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'PermissionForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ClearScope', 'GetBasePath',
|
||||
'ReturnToCaller', 'InventoryList', 'ProjectList', 'LookUpInit'
|
||||
];
|
||||
|
||||
|
||||
@ -319,7 +319,12 @@ function UsersEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
// Related set: Add button
|
||||
scope.add = function(set) {
|
||||
$rootScope.flashMessage = null;
|
||||
$location.path('/' + base + '/' + $routeParams.user_id + '/' + set);
|
||||
if (set == 'permissions') {
|
||||
$location.path('/' + base + '/' + $routeParams.user_id + '/' + set + '/add');
|
||||
}
|
||||
else {
|
||||
$location.path('/' + base + '/' + $routeParams.user_id + '/' + set);
|
||||
}
|
||||
};
|
||||
|
||||
// Related set: Edit button
|
||||
|
||||
103
awx/ui/static/js/forms/Permissions.js
Normal file
103
awx/ui/static/js/forms/Permissions.js
Normal file
@ -0,0 +1,103 @@
|
||||
/*********************************************
|
||||
* Copyright (c) 2013 AnsibleWorks, Inc.
|
||||
*
|
||||
* Permissions.js
|
||||
*
|
||||
* Form definition for Projects model
|
||||
*
|
||||
*
|
||||
*/
|
||||
angular.module('PermissionFormDefinition', [])
|
||||
.value(
|
||||
'PermissionsForm', {
|
||||
|
||||
addTitle: 'Add Permission', //Title in add mode
|
||||
editTitle: '{{ name }}', //Title in edit mode
|
||||
name: 'permission', //entity or model name in singular form
|
||||
well: true, //Wrap the form with TB well/
|
||||
|
||||
fields: {
|
||||
category: {
|
||||
label: 'Permission Type',
|
||||
type: 'radio',
|
||||
options: [{ label: 'Inventory', value: 'i' }, { label: 'Deployment', value: 'd'}],
|
||||
ngChange: 'selectCategory()'
|
||||
},
|
||||
name: {
|
||||
label: 'Name',
|
||||
type: 'text',
|
||||
addRequired: true,
|
||||
editRequired: true,
|
||||
capitalize: true
|
||||
},
|
||||
description: {
|
||||
label: 'Description',
|
||||
type: 'text',
|
||||
addRequired: false,
|
||||
editRequired: false
|
||||
},
|
||||
user: {
|
||||
label: 'User',
|
||||
type: 'hidden'
|
||||
},
|
||||
team: {
|
||||
label: 'Team',
|
||||
type: 'hidden'
|
||||
},
|
||||
project: {
|
||||
label: 'Project',
|
||||
type: 'lookup',
|
||||
sourceModel: 'project',
|
||||
sourceField: 'name',
|
||||
ngShow: "category == 'd'",
|
||||
ngClick: 'lookUpProject()',
|
||||
},
|
||||
inventory: {
|
||||
label: 'Inventory',
|
||||
type: 'lookup',
|
||||
sourceModel: 'inventory',
|
||||
sourceField: 'name',
|
||||
ngClick: 'lookUpInventory()',
|
||||
},
|
||||
inventory_permission_type: {
|
||||
label: 'Permission',
|
||||
type: 'radio',
|
||||
ngShow: "category == 'i'",
|
||||
options: [
|
||||
{label: 'Admin', value: 'PERM_INVENTORY_ADMIN'},
|
||||
{label: 'Read', value: 'PERM_INVENTORY_READ'},
|
||||
{label: 'Write', value: 'PERM_INVENTORY_WRITE'}
|
||||
]
|
||||
},
|
||||
deployment_permission_type: {
|
||||
label: 'Permission',
|
||||
type: 'radio',
|
||||
ngShow: "category == 'd'",
|
||||
options: [
|
||||
{label: 'Deploy', value: 'PERM_INVENTORY_DEPLOY'},
|
||||
{label: 'Check', value: 'PERM_INVENTORY_CHECK'}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
buttons: { //for now always generates <button> tags
|
||||
save: {
|
||||
label: 'Save',
|
||||
icon: 'icon-ok',
|
||||
"class": 'btn-success',
|
||||
ngClick: 'formSave()', //$scope.function to call on click, optional
|
||||
ngDisabled: true //Disable when $pristine or $invalid, optional
|
||||
},
|
||||
reset: {
|
||||
ngClick: 'formReset()',
|
||||
label: 'Reset',
|
||||
icon: 'icon-remove',
|
||||
ngDisabled: true //Disabled when $pristine
|
||||
}
|
||||
},
|
||||
|
||||
related: { //related colletions (and maybe items?)
|
||||
|
||||
}
|
||||
|
||||
}); // Form
|
||||
@ -94,6 +94,7 @@ angular.module('UserFormDefinition', [])
|
||||
},
|
||||
|
||||
related: { //related colletions (and maybe items?)
|
||||
|
||||
credentials: {
|
||||
type: 'collection',
|
||||
title: 'Credentials',
|
||||
@ -135,6 +136,53 @@ angular.module('UserFormDefinition', [])
|
||||
awToolTip: 'Delete the credential'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
permissions: {
|
||||
type: 'collection',
|
||||
title: 'Permissions',
|
||||
iterator: 'permission',
|
||||
open: false,
|
||||
|
||||
actions: {
|
||||
add: {
|
||||
ngClick: "add('permissions')",
|
||||
icon: 'icon-plus',
|
||||
label: 'Add',
|
||||
awToolTip: 'Add a permission for this user'
|
||||
}
|
||||
},
|
||||
|
||||
fields: {
|
||||
name: {
|
||||
key: true,
|
||||
label: 'Name'
|
||||
},
|
||||
project: {
|
||||
label: 'Project'
|
||||
},
|
||||
inventory: {
|
||||
label: 'Inventory'
|
||||
}
|
||||
},
|
||||
|
||||
fieldActions: {
|
||||
edit: {
|
||||
label: 'Edit',
|
||||
ngClick: "edit('permissions', \{\{ permission.id \}\}, '\{\{ permission.name \}\}')",
|
||||
icon: 'icon-edit',
|
||||
"class": 'btn-success',
|
||||
awToolTip: 'Edit the permission'
|
||||
},
|
||||
|
||||
"delete": {
|
||||
label: 'Delete',
|
||||
ngClick: "delete('permissions', \{\{ permission.id \}\}, '\{\{ permission.name \}\}', 'permissions')",
|
||||
icon: 'icon-remove',
|
||||
"class": 'btn-danger',
|
||||
awToolTip: 'Delete the permission'
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
|
||||
@ -42,7 +42,8 @@ angular.module('InventoriesListDefinition', [])
|
||||
ngClick: 'viewJobs(\{\{ inventory.id \}\})',
|
||||
searchField: 'has_active_failures',
|
||||
searchType: 'boolean',
|
||||
searchOptions: [{ name: "No", value: 0 }, { name: "Yes", value: 1 }]
|
||||
searchOptions: [{ name: "No", value: 0 }, { name: "Yes", value: 1 }],
|
||||
excludeModal: true
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@ -368,6 +368,38 @@ angular.module('FormGenerator', ['GeneratorHelpers'])
|
||||
}
|
||||
}
|
||||
|
||||
//radio
|
||||
if (field.type == 'radio') {
|
||||
if ( (! field.readonly) || (field.readonly && options.mode == 'edit') ) {
|
||||
html += "<div class=\"control-group\" "
|
||||
html += (field.ngShow) ? this.attr(field,'ngShow') : "";
|
||||
html += ">\n";
|
||||
html += "<label class=\"control-label\" for=\"" + fld + '">';
|
||||
if (field.awPopOver) {
|
||||
html += "<a href=\"\" " + this.attr(field,'awPopOver');
|
||||
html += (field.dataTitle) ? this.attr(field, 'dataTitle') : "";
|
||||
html += (field.dataPlacement) ? this.attr(field, 'dataPlacement') : "";
|
||||
html += "><i class=\"icon-info-sign\"></i></a> ";
|
||||
}
|
||||
html += field.label + '</label>' + "\n";
|
||||
html += "<div class=\"controls\">\n";
|
||||
for (var i=0; i < field.options.length; i++) {
|
||||
html += "<label class=\"radio inline\">";
|
||||
html += "<input type=\"radio\" ";
|
||||
html += "name=\"" + fld + "\" ";
|
||||
html += "ng-model=\"" + fld + "\" ";
|
||||
html += (field.ngChange) ? this.attr(field,'ngChange') : "";
|
||||
html += "value=\"" + field.options[i].value + "\" ";
|
||||
html += (field.readonly) ? "readonly " : "";
|
||||
html += " /> " + field.options[i].label + "\n";
|
||||
html += "</label>\n";
|
||||
}
|
||||
html += "<span class=\"error api-error\" ng-bind=\"" + fld + "_api_error\"></span>\n";
|
||||
html += "</div>\n";
|
||||
html += "</div>\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (field.type == 'hidden') {
|
||||
if ( (options.mode == 'edit' && field.includeOnEdit) ||
|
||||
(options.mode == 'add' && field.includeOnAdd) ) {
|
||||
|
||||
@ -153,7 +153,8 @@ angular.module('ListGenerator', ['GeneratorHelpers'])
|
||||
html += "<th>#</th>\n";
|
||||
}
|
||||
for (var fld in list.fields) {
|
||||
if (list.fields[fld].searchOnly == undefined || list.fields[fld].searchOnly == false) {
|
||||
if ( (list.fields[fld].searchOnly == undefined || list.fields[fld].searchOnly == false) &&
|
||||
!(options.mode == 'lookup' && list.fields[fld].excludeModal !== undefined && list.fields[fld].excludeModal == true) ) {
|
||||
html += "<th class=\"list-header\" id=\"";
|
||||
html += (list.fields[fld].id) ? list.fields[fld].id : fld + "-header";
|
||||
html += "\"";
|
||||
@ -201,7 +202,8 @@ angular.module('ListGenerator', ['GeneratorHelpers'])
|
||||
base = base.replace(/^\//,'');
|
||||
for (fld in list.fields) {
|
||||
cnt++;
|
||||
if (list.fields[fld].searchOnly == undefined || list.fields[fld].searchOnly == false) {
|
||||
if ( (list.fields[fld].searchOnly == undefined || list.fields[fld].searchOnly == false) &&
|
||||
!(options.mode == 'lookup' && list.fields[fld].excludeModal !== undefined && list.fields[fld].excludeModal == true) ) {
|
||||
html += Column({ list: list, fld: fld, options: options, base: base });
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,6 +37,7 @@
|
||||
<script src="{{ STATIC_URL }}js/controllers/Jobs.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/controllers/JobEvents.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/controllers/JobHosts.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/controllers/Permissions.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/forms/Users.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/forms/Organizations.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/forms/Inventories.js"></script>
|
||||
@ -48,6 +49,7 @@
|
||||
<script src="{{ STATIC_URL }}js/forms/Jobs.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/forms/JobEvents.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/forms/Projects.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/forms/Permissions.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/lists/Users.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/lists/Organizations.js"></script>
|
||||
<script src="{{ STATIC_URL }}js/lists/Admins.js"></script>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user