mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Consistent change of entry status.
This patch adds action list and control buttons for consistent change of enty status for user, hbac rules, sudo rules, SELinux maps and dns zones. Action lists with 'enable' and 'disable' and 'delete' options were added to details facets. Two control buttons: 'enable' and 'disable' were added to search facets. https://fedorahosted.org/freeipa/ticket/2247
This commit is contained in:
@@ -102,24 +102,42 @@ IPA.dns.zone_entity = function(spec) {
|
||||
label: IPA.messages.status.label,
|
||||
formatter: IPA.boolean_status_formatter()
|
||||
}
|
||||
]
|
||||
],
|
||||
control_buttons: {
|
||||
buttons: [
|
||||
{
|
||||
name: 'disable',
|
||||
label: IPA.messages.buttons.disable,
|
||||
icon: 'disabled-icon',
|
||||
needs_confirm: true,
|
||||
action: {
|
||||
factory: IPA.batch_items_action,
|
||||
method: 'disable',
|
||||
enable_cond: ['item-selected']
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'enable',
|
||||
label: IPA.messages.buttons.enable,
|
||||
icon: 'enabled-icon',
|
||||
needs_confirm: true,
|
||||
action: {
|
||||
factory: IPA.batch_items_action,
|
||||
method: 'enable',
|
||||
enable_cond: ['item-selected']
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}).
|
||||
details_facet({
|
||||
factory: IPA.dnszone_details_facet,
|
||||
command_mode: 'info',
|
||||
sections: [{
|
||||
sections: [
|
||||
{
|
||||
name: 'identity',
|
||||
fields: [
|
||||
'idnsname',
|
||||
{
|
||||
type: 'enable',
|
||||
name: 'idnszoneactive',
|
||||
label: IPA.messages.status.label,
|
||||
options: [
|
||||
{ value: 'TRUE', label: IPA.messages.status.enabled },
|
||||
{ value: 'FALSE', label: IPA.messages.status.disabled }
|
||||
]
|
||||
},
|
||||
'idnssoamname',
|
||||
'idnssoarname',
|
||||
'idnssoaserial',
|
||||
@@ -198,7 +216,20 @@ IPA.dns.zone_entity = function(spec) {
|
||||
name: 'idnsallowsyncptr'
|
||||
}
|
||||
]
|
||||
}]
|
||||
}],
|
||||
action_list: {
|
||||
factory: IPA.action_list_widget,
|
||||
name: 'action',
|
||||
state_evaluator: {
|
||||
factory: IPA.enable_state_evaluator,
|
||||
field: 'idnszoneactive'
|
||||
},
|
||||
actions: [
|
||||
IPA.enable_action,
|
||||
IPA.disable_action,
|
||||
IPA.delete_action
|
||||
]
|
||||
}
|
||||
}).
|
||||
nested_search_facet({
|
||||
factory: IPA.dns.record_search_facet,
|
||||
|
||||
@@ -25,8 +25,7 @@
|
||||
|
||||
IPA.hbac = {
|
||||
//priority of commands in details facet
|
||||
remove_method_priority: IPA.config.default_priority - 1,
|
||||
enable_priority: IPA.config.default_priority + 1
|
||||
remove_method_priority: IPA.config.default_priority - 1
|
||||
};
|
||||
|
||||
IPA.hbac.rule_entity = function(spec) {
|
||||
@@ -47,12 +46,51 @@ IPA.hbac.rule_entity = function(spec) {
|
||||
formatter: IPA.boolean_status_formatter()
|
||||
},
|
||||
'description'
|
||||
]
|
||||
],
|
||||
control_buttons: {
|
||||
buttons: [
|
||||
{
|
||||
name: 'disable',
|
||||
label: IPA.messages.buttons.disable,
|
||||
icon: 'disabled-icon',
|
||||
needs_confirm: true,
|
||||
action: {
|
||||
factory: IPA.batch_items_action,
|
||||
method: 'disable',
|
||||
enable_cond: ['item-selected']
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'enable',
|
||||
label: IPA.messages.buttons.enable,
|
||||
icon: 'enabled-icon',
|
||||
needs_confirm: true,
|
||||
action: {
|
||||
factory: IPA.batch_items_action,
|
||||
method: 'enable',
|
||||
enable_cond: ['item-selected']
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}).
|
||||
details_facet({
|
||||
factory: IPA.hbacrule_details_facet,
|
||||
entity: that,
|
||||
command_mode: 'info'
|
||||
command_mode: 'info',
|
||||
action_list: {
|
||||
factory: IPA.action_list_widget,
|
||||
name: 'action',
|
||||
state_evaluator: {
|
||||
factory: IPA.enable_state_evaluator,
|
||||
field: 'ipaenabledflag'
|
||||
},
|
||||
actions: [
|
||||
IPA.enable_action,
|
||||
IPA.disable_action,
|
||||
IPA.delete_action
|
||||
]
|
||||
}
|
||||
}).
|
||||
adder_dialog({
|
||||
fields: [ 'cn' ]
|
||||
@@ -203,13 +241,6 @@ IPA.hbacrule_details_facet = function(spec) {
|
||||
type: 'textarea',
|
||||
name: 'description',
|
||||
widget: 'general.description'
|
||||
},
|
||||
{
|
||||
type: 'enable',
|
||||
name: 'ipaenabledflag',
|
||||
label: IPA.messages.status.label,
|
||||
priority: IPA.hbac.enable_priority,
|
||||
widget: 'general.ipaenabledflag'
|
||||
}
|
||||
];
|
||||
|
||||
@@ -225,14 +256,6 @@ IPA.hbacrule_details_facet = function(spec) {
|
||||
{
|
||||
type: 'textarea',
|
||||
name: 'description'
|
||||
},
|
||||
{
|
||||
type: 'enable',
|
||||
name: 'ipaenabledflag',
|
||||
options: [
|
||||
{ value: 'TRUE', label: IPA.messages.status.enabled },
|
||||
{ value: 'FALSE', label: IPA.messages.status.disabled }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -23,8 +23,7 @@
|
||||
/* REQUIRES: ipa.js, details.js, search.js, add.js, facet.js, entity.js */
|
||||
|
||||
IPA.selinux = {
|
||||
remove_method_priority: IPA.config.default_priority - 1,
|
||||
enable_priority: IPA.config.default_priority + 1
|
||||
remove_method_priority: IPA.config.default_priority - 1
|
||||
};
|
||||
|
||||
IPA.selinux.selinuxusermap_entity = function(spec) {
|
||||
@@ -46,12 +45,51 @@ IPA.selinux.selinuxusermap_entity = function(spec) {
|
||||
formatter: IPA.boolean_status_formatter()
|
||||
},
|
||||
'description'
|
||||
]
|
||||
],
|
||||
control_buttons: {
|
||||
buttons: [
|
||||
{
|
||||
name: 'disable',
|
||||
label: IPA.messages.buttons.disable,
|
||||
icon: 'disabled-icon',
|
||||
needs_confirm: true,
|
||||
action: {
|
||||
factory: IPA.batch_items_action,
|
||||
method: 'disable',
|
||||
enable_cond: ['item-selected']
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'enable',
|
||||
label: IPA.messages.buttons.enable,
|
||||
icon: 'enabled-icon',
|
||||
needs_confirm: true,
|
||||
action: {
|
||||
factory: IPA.batch_items_action,
|
||||
method: 'enable',
|
||||
enable_cond: ['item-selected']
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}).
|
||||
details_facet({
|
||||
factory: IPA.selinux_details_facet,
|
||||
entity: that,
|
||||
command_mode: 'info'
|
||||
command_mode: 'info',
|
||||
action_list: {
|
||||
factory: IPA.action_list_widget,
|
||||
name: 'action',
|
||||
state_evaluator: {
|
||||
factory: IPA.enable_state_evaluator,
|
||||
field: 'ipaenabledflag'
|
||||
},
|
||||
actions: [
|
||||
IPA.enable_action,
|
||||
IPA.disable_action,
|
||||
IPA.delete_action
|
||||
]
|
||||
}
|
||||
}).
|
||||
adder_dialog({
|
||||
fields: [
|
||||
@@ -91,13 +129,6 @@ IPA.selinux_details_facet = function(spec) {
|
||||
type: 'entity_select',
|
||||
name: 'seealso',
|
||||
widget: 'general.seealso'
|
||||
},
|
||||
{
|
||||
type: 'enable',
|
||||
name: 'ipaenabledflag',
|
||||
label: IPA.messages.status.label,
|
||||
priority: IPA.selinux.enable_priority,
|
||||
widget: 'general.ipaenabledflag'
|
||||
}
|
||||
];
|
||||
|
||||
@@ -123,14 +154,6 @@ IPA.selinux_details_facet = function(spec) {
|
||||
name: 'seealso',
|
||||
other_entity: 'hbacrule',
|
||||
other_field: 'cn'
|
||||
},
|
||||
{
|
||||
type: 'enable',
|
||||
name: 'ipaenabledflag',
|
||||
options: [
|
||||
{ value: 'TRUE', label: IPA.messages.status.enabled },
|
||||
{ value: 'FALSE', label: IPA.messages.status.disabled }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -24,8 +24,7 @@
|
||||
|
||||
IPA.sudo = {
|
||||
//priority of commands in details facet
|
||||
remove_method_priority: IPA.config.default_priority - 1,
|
||||
enable_priority: IPA.config.default_priority + 1
|
||||
remove_method_priority: IPA.config.default_priority - 1
|
||||
};
|
||||
|
||||
IPA.sudo.rule_entity = function(spec) {
|
||||
@@ -45,12 +44,51 @@ IPA.sudo.rule_entity = function(spec) {
|
||||
formatter: IPA.boolean_status_formatter()
|
||||
},
|
||||
'description'
|
||||
]
|
||||
],
|
||||
control_buttons: {
|
||||
buttons: [
|
||||
{
|
||||
name: 'disable',
|
||||
label: IPA.messages.buttons.disable,
|
||||
icon: 'disabled-icon',
|
||||
needs_confirm: true,
|
||||
action: {
|
||||
factory: IPA.batch_items_action,
|
||||
method: 'disable',
|
||||
enable_cond: ['item-selected']
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'enable',
|
||||
label: IPA.messages.buttons.enable,
|
||||
icon: 'enabled-icon',
|
||||
needs_confirm: true,
|
||||
action: {
|
||||
factory: IPA.batch_items_action,
|
||||
method: 'enable',
|
||||
enable_cond: ['item-selected']
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}).
|
||||
details_facet({
|
||||
factory: IPA.sudorule_details_facet,
|
||||
entity: that,
|
||||
command_mode: 'info'
|
||||
command_mode: 'info',
|
||||
action_list: {
|
||||
factory: IPA.action_list_widget,
|
||||
name: 'action',
|
||||
state_evaluator: {
|
||||
factory: IPA.enable_state_evaluator,
|
||||
field: 'ipaenabledflag'
|
||||
},
|
||||
actions: [
|
||||
IPA.enable_action,
|
||||
IPA.disable_action,
|
||||
IPA.delete_action
|
||||
]
|
||||
}
|
||||
}).
|
||||
adder_dialog({
|
||||
fields: [ 'cn' ]
|
||||
@@ -201,13 +239,6 @@ IPA.sudorule_details_facet = function(spec) {
|
||||
type: 'textarea',
|
||||
name: 'description',
|
||||
widget: 'general.description'
|
||||
},
|
||||
{
|
||||
type: 'enable',
|
||||
name: 'ipaenabledflag',
|
||||
label: IPA.messages.status.label,
|
||||
priority: IPA.sudo.enable_priority,
|
||||
widget: 'general.ipaenabledflag'
|
||||
}
|
||||
];
|
||||
|
||||
@@ -223,14 +254,6 @@ IPA.sudorule_details_facet = function(spec) {
|
||||
{
|
||||
type: 'textarea',
|
||||
name: 'description'
|
||||
},
|
||||
{
|
||||
type: 'enable',
|
||||
name: 'ipaenabledflag',
|
||||
options: [
|
||||
{ value: 'TRUE', label: IPA.messages.status.enabled },
|
||||
{ value: 'FALSE', label: IPA.messages.status.disabled }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
/* Authors:
|
||||
* Pavel Zuna <pzuna@redhat.com>
|
||||
* Adam Young <ayoung@redhat.com>
|
||||
* Endi Sukma Dewata <edewata@redhat.com>
|
||||
* Petr Vobornik <pvoborni@redhat.com>
|
||||
*
|
||||
* Copyright (C) 2010 Red Hat
|
||||
* see file 'COPYING' for use and warranty information
|
||||
@@ -52,7 +54,35 @@ IPA.user.entity = function(spec) {
|
||||
'mail',
|
||||
'telephonenumber',
|
||||
'title'
|
||||
]
|
||||
],
|
||||
control_buttons: {
|
||||
buttons: [
|
||||
{
|
||||
name: 'disable',
|
||||
label: IPA.messages.buttons.disable,
|
||||
icon: 'disabled-icon',
|
||||
needs_confirm: true,
|
||||
hide_cond: ['self-service'],
|
||||
action: {
|
||||
factory: IPA.batch_items_action,
|
||||
method: 'disable',
|
||||
enable_cond: ['item-selected']
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'enable',
|
||||
label: IPA.messages.buttons.enable,
|
||||
icon: 'enabled-icon',
|
||||
needs_confirm: true,
|
||||
hide_cond: ['self-service'],
|
||||
action: {
|
||||
factory: IPA.batch_items_action,
|
||||
method: 'enable',
|
||||
enable_cond: ['item-selected']
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}).
|
||||
details_facet({
|
||||
factory: IPA.user.details_facet,
|
||||
@@ -72,11 +102,6 @@ IPA.user.entity = function(spec) {
|
||||
{
|
||||
name: 'account',
|
||||
fields: [
|
||||
{
|
||||
factory: IPA.user_status_widget,
|
||||
name: 'nsaccountlock',
|
||||
label: IPA.messages.status.label
|
||||
},
|
||||
'uid',
|
||||
{
|
||||
factory: IPA.user_password_widget,
|
||||
@@ -191,7 +216,21 @@ IPA.user.entity = function(spec) {
|
||||
name: 'misc',
|
||||
fields: [ 'carlicense' ]
|
||||
}
|
||||
]
|
||||
],
|
||||
action_list: {
|
||||
factory: IPA.action_list_widget,
|
||||
name: 'action',
|
||||
state_evaluator: {
|
||||
factory: IPA.enable_state_evaluator,
|
||||
field: 'nsaccountlock',
|
||||
invert_value: true
|
||||
},
|
||||
actions: [
|
||||
IPA.enable_action,
|
||||
IPA.disable_action,
|
||||
IPA.delete_action
|
||||
]
|
||||
}
|
||||
}).
|
||||
association_facet({
|
||||
name: 'memberof_group',
|
||||
@@ -380,167 +419,6 @@ IPA.user_adder_dialog = function(spec) {
|
||||
return that;
|
||||
};
|
||||
|
||||
IPA.user_status_widget = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
var that = IPA.input_widget(spec);
|
||||
|
||||
|
||||
that.create = function(container) {
|
||||
|
||||
that.widget_create(container);
|
||||
|
||||
that.status_span = $('<span/>', {
|
||||
name: 'status'
|
||||
}).appendTo(container);
|
||||
|
||||
that.link_span = $('<span/>', {
|
||||
name: 'link'
|
||||
}).appendTo(container);
|
||||
|
||||
that.link_span.append(': ');
|
||||
|
||||
that.status_link = $('<a/>', {
|
||||
name: 'link',
|
||||
click: function() {
|
||||
|
||||
var facet = that.entity.get_facet();
|
||||
|
||||
if (facet.is_dirty()) {
|
||||
var dialog = IPA.dirty_dialog({
|
||||
facet: facet
|
||||
});
|
||||
|
||||
dialog.callback = function() {
|
||||
that.show_activation_dialog();
|
||||
};
|
||||
|
||||
dialog.open(container);
|
||||
|
||||
} else {
|
||||
that.show_activation_dialog();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}).appendTo(that.link_span);
|
||||
};
|
||||
|
||||
that.update = function(values) {
|
||||
|
||||
//if (!that.record) return;
|
||||
|
||||
//var lock_field = 'nsaccountlock';
|
||||
//var locked_field = that.record[lock_field];
|
||||
var locked_field = values;
|
||||
var locked = false;
|
||||
|
||||
if (locked_field instanceof Array) {
|
||||
locked_field = locked_field[0];
|
||||
}
|
||||
if (typeof locked_field === 'boolean') {
|
||||
locked = locked_field;
|
||||
} else {
|
||||
locked = locked_field && locked_field.toLowerCase() === 'true';
|
||||
}
|
||||
|
||||
var status;
|
||||
var action;
|
||||
|
||||
if (locked) {
|
||||
status = IPA.messages.status.disabled;
|
||||
action = 'enable';
|
||||
|
||||
} else {
|
||||
status = IPA.messages.status.enabled;
|
||||
action = 'disable';
|
||||
}
|
||||
|
||||
that.status_span.html(status);
|
||||
that.status_link.attr('href', action);
|
||||
|
||||
var message = IPA.messages.objects.user.status_link;
|
||||
var action_label = IPA.messages.status[action];
|
||||
message = message.replace('${action}', action_label);
|
||||
|
||||
that.status_link.html(message);
|
||||
|
||||
if (that.writable) {
|
||||
that.link_span.css('display', '');
|
||||
|
||||
} else {
|
||||
that.link_span.css('display', 'none');
|
||||
}
|
||||
};
|
||||
|
||||
that.clear = function() {
|
||||
that.link_span.css('display', 'none');
|
||||
that.status_span.text('');
|
||||
};
|
||||
|
||||
that.show_activation_dialog = function() {
|
||||
|
||||
var action = that.status_link.attr('href');
|
||||
|
||||
var message = IPA.messages.objects.user.status_confirmation;
|
||||
var action_label = IPA.messages.status[action];
|
||||
message = message.replace('${action}', action_label.toLocaleLowerCase());
|
||||
|
||||
var dialog = IPA.dialog({
|
||||
title: IPA.messages.dialogs.confirmation
|
||||
});
|
||||
|
||||
dialog.create = function() {
|
||||
dialog.container.append(message);
|
||||
};
|
||||
|
||||
dialog.create_button({
|
||||
name: 'set_status',
|
||||
label: action_label,
|
||||
click: function() {
|
||||
that.set_status(
|
||||
action,
|
||||
function(data, textStatus, xhr) {
|
||||
var facet = that.entity.get_facet();
|
||||
facet.refresh();
|
||||
dialog.close();
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
dialog.create_button({
|
||||
name: 'cancel',
|
||||
label: IPA.messages.buttons.cancel,
|
||||
click: function() {
|
||||
dialog.close();
|
||||
}
|
||||
});
|
||||
|
||||
dialog.open(that.container);
|
||||
};
|
||||
|
||||
that.set_status = function(method, on_success, on_error) {
|
||||
|
||||
var pkey = IPA.nav.get_state('user-pkey');
|
||||
|
||||
IPA.command({
|
||||
entity: 'user',
|
||||
method: method,
|
||||
args: [pkey],
|
||||
on_success: on_success,
|
||||
on_error: on_error
|
||||
}).execute();
|
||||
};
|
||||
|
||||
that.widgets_created = function() {
|
||||
that.widget = that;
|
||||
};
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
IPA.user_password_widget = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
Reference in New Issue
Block a user