mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Code cleanup of HBAC, Sudo rules
https://fedorahosted.org/freeipa/ticket/1515
This commit is contained in:
committed by
Endi S. Dewata
parent
fdee0892f1
commit
ab667912cf
@@ -432,6 +432,7 @@ IPA.association_table_widget = function (spec) {
|
||||
$('.action-button', that.table).addClass('action-button-disabled');
|
||||
that.unselect_all();
|
||||
}
|
||||
that.enabled = enabled;
|
||||
};
|
||||
|
||||
that.select_changed = function() {
|
||||
@@ -483,11 +484,13 @@ IPA.association_table_widget = function (spec) {
|
||||
|
||||
that.load = function(result) {
|
||||
that.values = result[that.name] || [];
|
||||
that.reset();
|
||||
that.update();
|
||||
that.unselect_all();
|
||||
};
|
||||
|
||||
that.update = function() {
|
||||
that.update = function(values) {
|
||||
|
||||
if(values) that.values = values;
|
||||
|
||||
that.empty();
|
||||
|
||||
|
@@ -577,6 +577,44 @@ IPA.link_field = function(spec) {
|
||||
return that;
|
||||
};
|
||||
|
||||
IPA.enable_field = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
var that = IPA.radio_field(spec);
|
||||
|
||||
that.enable_method = spec.enable_method || 'enable';
|
||||
that.disable_method = spec.enable_method || 'disable';
|
||||
that.enable_option = spec.enable_option || 'TRUE';
|
||||
|
||||
that.get_update_info = function() {
|
||||
|
||||
var info = IPA.update_info_builder.new_update_info();
|
||||
if(that.test_dirty()) {
|
||||
var values = that.save();
|
||||
var method = that.disable_method;
|
||||
|
||||
if(values[0] === that.enable_option) {
|
||||
method = that.enable_method;
|
||||
}
|
||||
|
||||
var command = IPA.command({
|
||||
entity: that.entity.name,
|
||||
method: method,
|
||||
args: that.entity.get_primary_key(),
|
||||
options: {all: true, rights: true}
|
||||
});
|
||||
|
||||
|
||||
info.append_command(command, that.priority);
|
||||
}
|
||||
|
||||
return info;
|
||||
};
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
IPA.field_container = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
@@ -686,3 +724,4 @@ IPA.field_factories['textarea'] = IPA.field;
|
||||
IPA.field_factories['entity_select'] = IPA.combobox_field;
|
||||
IPA.field_factories['combobox'] = IPA.combobox_field;
|
||||
IPA.field_factories['link'] = IPA.link_field;
|
||||
IPA.field_factories['enable'] = IPA.enable_field;
|
||||
|
@@ -23,7 +23,11 @@
|
||||
|
||||
/* REQUIRES: ipa.js, details.js, search.js, add.js, facet.js, entity.js */
|
||||
|
||||
IPA.hbac = {};
|
||||
IPA.hbac = {
|
||||
//priority of commands in details facet
|
||||
remove_method_priority: IPA.config.default_priority - 1,
|
||||
enable_priority: IPA.config.default_priority + 1
|
||||
};
|
||||
|
||||
IPA.hbac.rule_entity = function(spec) {
|
||||
|
||||
@@ -40,7 +44,9 @@ IPA.hbac.rule_entity = function(spec) {
|
||||
]
|
||||
}).
|
||||
details_facet({
|
||||
factory: IPA.hbacrule_details_facet
|
||||
factory: IPA.hbacrule_details_facet,
|
||||
entity: that,
|
||||
command_mode: 'info'
|
||||
}).
|
||||
adder_dialog({
|
||||
fields: [ 'cn' ]
|
||||
@@ -70,7 +76,7 @@ IPA.hbac.service_entity = function(spec) {
|
||||
fields: [
|
||||
'cn',
|
||||
{
|
||||
factory: IPA.textarea_widget,
|
||||
type: 'textarea',
|
||||
name: 'description'
|
||||
}
|
||||
]
|
||||
@@ -105,7 +111,7 @@ IPA.hbac.service_entity = function(spec) {
|
||||
fields: [
|
||||
'cn',
|
||||
{
|
||||
factory: IPA.textarea_widget,
|
||||
type: 'textarea',
|
||||
name: 'description'
|
||||
}
|
||||
]
|
||||
@@ -135,7 +141,7 @@ IPA.hbac.service_group_entity = function(spec) {
|
||||
fields: [
|
||||
'cn',
|
||||
{
|
||||
factory: IPA.textarea_widget,
|
||||
type: 'textarea',
|
||||
name: 'description'
|
||||
}
|
||||
]
|
||||
@@ -169,7 +175,7 @@ IPA.hbac.service_group_entity = function(spec) {
|
||||
fields: [
|
||||
'cn',
|
||||
{
|
||||
factory: IPA.textarea_widget,
|
||||
type: 'textarea',
|
||||
name: 'description'
|
||||
}
|
||||
]
|
||||
@@ -181,395 +187,341 @@ IPA.hbac.service_group_entity = function(spec) {
|
||||
|
||||
IPA.hbacrule_details_facet = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
var entity_name = spec.entity.name;
|
||||
|
||||
//
|
||||
// General
|
||||
//
|
||||
|
||||
spec.fields = [
|
||||
{
|
||||
name: 'cn',
|
||||
read_only: true,
|
||||
widget: 'general.cn'
|
||||
},
|
||||
{
|
||||
type: 'textarea',
|
||||
name: 'description',
|
||||
widget: 'general.description'
|
||||
},
|
||||
{
|
||||
type: 'enable',
|
||||
name: 'ipaenabledflag',
|
||||
priority: IPA.sudo.enable_priority,
|
||||
widget: 'general.ipaenabledflag'
|
||||
}
|
||||
];
|
||||
|
||||
spec.widgets = [
|
||||
{
|
||||
type: 'details_table_section',
|
||||
name: 'general',
|
||||
label: IPA.messages.details.general,
|
||||
widgets: [
|
||||
{
|
||||
name: 'cn'
|
||||
},
|
||||
{
|
||||
type: 'textarea',
|
||||
name: 'description'
|
||||
},
|
||||
{
|
||||
type: 'enable',
|
||||
name: 'ipaenabledflag',
|
||||
options: [
|
||||
{ value: 'TRUE', label: IPA.get_message('true') },
|
||||
{ value: 'FALSE', label: IPA.get_message('false') }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
//
|
||||
// Users
|
||||
//
|
||||
|
||||
spec.fields.push(
|
||||
{
|
||||
type: 'radio',
|
||||
name: 'usercategory',
|
||||
widget: 'user.rule.usercategory'
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
name: 'memberuser_user',
|
||||
widget: 'user.rule.memberuser_user',
|
||||
priority: IPA.hbac.remove_method_priority
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
name: 'memberuser_group',
|
||||
widget: 'user.rule.memberuser_group',
|
||||
priority: IPA.hbac.remove_method_priority
|
||||
}
|
||||
);
|
||||
|
||||
spec.widgets.push(
|
||||
{
|
||||
factory: IPA.collapsible_section,
|
||||
name: 'user',
|
||||
label: IPA.messages.objects.hbacrule.user,
|
||||
widgets: [
|
||||
{
|
||||
factory: IPA.rule_details_widget,
|
||||
name: 'rule',
|
||||
radio_name: 'usercategory',
|
||||
options: [
|
||||
{ value: 'all',
|
||||
label: IPA.messages.objects.hbacrule.anyone },
|
||||
{ value: '',
|
||||
label: IPA.messages.objects.hbacrule.specified_users }
|
||||
],
|
||||
tables: [
|
||||
{ name: 'memberuser_user' },
|
||||
{ name: 'memberuser_group' }
|
||||
],
|
||||
widgets: [
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
id: entity_name+'-memberuser_user',
|
||||
name: 'memberuser_user',
|
||||
add_method: 'add_user',
|
||||
remove_method: 'remove_user',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
id: entity_name+'-memberuser_group',
|
||||
name: 'memberuser_group',
|
||||
add_method: 'add_user',
|
||||
remove_method: 'remove_user',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
//
|
||||
// Hosts
|
||||
//
|
||||
|
||||
spec.fields.push(
|
||||
{
|
||||
type: 'radio',
|
||||
name: 'hostcategory',
|
||||
widget: 'host.rule.hostcategory'
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
name: 'memberhost_host',
|
||||
widget: 'host.rule.memberhost_host',
|
||||
priority: IPA.hbac.remove_method_priority
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
name: 'memberhost_hostgroup',
|
||||
widget: 'host.rule.memberhost_hostgroup',
|
||||
priority: IPA.hbac.remove_method_priority
|
||||
}
|
||||
);
|
||||
|
||||
spec.widgets.push(
|
||||
{
|
||||
factory: IPA.collapsible_section,
|
||||
name: 'host',
|
||||
label: IPA.messages.objects.hbacrule.host,
|
||||
widgets: [
|
||||
{
|
||||
factory: IPA.rule_details_widget,
|
||||
name: 'rule',
|
||||
radio_name: 'hostcategory',
|
||||
options: [
|
||||
{
|
||||
'value': 'all',
|
||||
'label': IPA.messages.objects.hbacrule.any_host
|
||||
},
|
||||
{
|
||||
'value': '',
|
||||
'label': IPA.messages.objects.hbacrule.specified_hosts
|
||||
}
|
||||
],
|
||||
tables: [
|
||||
{ 'name': 'memberhost_host' },
|
||||
{ 'name': 'memberhost_hostgroup' }
|
||||
],
|
||||
widgets: [
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
id: entity_name+'-memberuser_user',
|
||||
name: 'memberhost_host',
|
||||
add_method: 'add_host',
|
||||
remove_method: 'remove_host',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
id: entity_name+'-memberuser_group',
|
||||
name: 'memberhost_hostgroup',
|
||||
add_method: 'add_host',
|
||||
remove_method: 'remove_host',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
//
|
||||
// Service
|
||||
//
|
||||
|
||||
spec.fields.push(
|
||||
{
|
||||
type: 'radio',
|
||||
name: 'servicecategory',
|
||||
widget: 'service.rule.servicecategory'
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
name: 'memberservice_hbacsvc',
|
||||
widget: 'service.rule.memberservice_hbacsvc',
|
||||
priority: IPA.hbac.remove_method_priority
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
name: 'memberservice_hbacsvcgroup',
|
||||
widget: 'service.rule.memberservice_hbacsvcgroup',
|
||||
priority: IPA.hbac.remove_method_priority
|
||||
}
|
||||
);
|
||||
|
||||
spec.widgets.push(
|
||||
{
|
||||
factory: IPA.collapsible_section,
|
||||
name: 'service',
|
||||
label: IPA.messages.objects.hbacrule.service,
|
||||
widgets: [
|
||||
{
|
||||
factory: IPA.rule_details_widget,
|
||||
name: 'rule',
|
||||
radio_name: 'servicecategory',
|
||||
options: [
|
||||
{ 'value': 'all', 'label': IPA.messages.objects.hbacrule.any_host },
|
||||
{ 'value': '', 'label': IPA.messages.objects.hbacrule.specified_hosts }
|
||||
],
|
||||
tables: [
|
||||
{ 'name': 'memberservice_hbacsvc' },
|
||||
{ 'name': 'memberservice_hbacsvcgroup' }
|
||||
],
|
||||
widgets: [
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
id: entity_name+'-memberuser_user',
|
||||
name: 'memberservice_hbacsvc',
|
||||
add_method: 'add_service',
|
||||
remove_method: 'remove_service',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
id: entity_name+'-memberuser_group',
|
||||
name: 'memberservice_hbacsvcgroup',
|
||||
add_method: 'add_service',
|
||||
remove_method: 'remove_service',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
//
|
||||
// Source host
|
||||
//
|
||||
|
||||
spec.fields.push(
|
||||
{
|
||||
type: 'radio',
|
||||
name: 'sourcehostcategory',
|
||||
widget: 'sourcehost.rule.sourcehostcategory'
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
name: 'sourcehost_host',
|
||||
widget: 'sourcehost.rule.sourcehost_host',
|
||||
priority: IPA.hbac.remove_method_priority
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
name: 'sourcehost_hostgroup',
|
||||
widget: 'sourcehost.rule.sourcehost_hostgroup',
|
||||
priority: IPA.hbac.remove_method_priority
|
||||
}
|
||||
);
|
||||
|
||||
spec.widgets.push(
|
||||
{
|
||||
factory: IPA.collapsible_section,
|
||||
name: 'sourcehost',
|
||||
label: IPA.messages.objects.hbacrule.sourcehost,
|
||||
widgets: [
|
||||
{
|
||||
factory: IPA.rule_details_widget,
|
||||
name: 'rule',
|
||||
radio_name: 'sourcehostcategory',
|
||||
options: [
|
||||
{ 'value': 'all', 'label': IPA.messages.objects.hbacrule.any_host },
|
||||
{ 'value': '', 'label': IPA.messages.objects.hbacrule.specified_hosts }
|
||||
],
|
||||
tables: [
|
||||
{ 'name': 'sourcehost_host' },
|
||||
{ 'name': 'sourcehost_hostgroup' }
|
||||
],
|
||||
widgets: [
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
id: entity_name+'-memberuser_user',
|
||||
name: 'sourcehost_host',
|
||||
add_method: 'add_sourcehost',
|
||||
remove_method: 'remove_sourcehost',
|
||||
add_title: IPA.messages.association.add.sourcehost,
|
||||
remove_title: IPA.messages.association.remove.sourcehost
|
||||
},
|
||||
{
|
||||
type: 'rule_association_table',
|
||||
id: entity_name+'-memberuser_group',
|
||||
name: 'sourcehost_hostgroup',
|
||||
add_method: 'add_sourcehost',
|
||||
remove_method: 'remove_sourcehost',
|
||||
add_title: IPA.messages.association.add.sourcehost,
|
||||
remove_title: IPA.messages.association.remove.sourcehost
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
var that = IPA.details_facet(spec);
|
||||
|
||||
function general_section(){
|
||||
var section = IPA.details_table_section({
|
||||
name: 'general',
|
||||
entity: that.entity,
|
||||
label: IPA.messages.details.general
|
||||
});
|
||||
|
||||
section.text({
|
||||
name: 'cn'
|
||||
});
|
||||
section.textarea({
|
||||
name: 'description'
|
||||
});
|
||||
section.radio({
|
||||
name: 'ipaenabledflag',
|
||||
options: [
|
||||
{ value: 'TRUE', label: IPA.get_message('true') },
|
||||
{ value: 'FALSE', label: IPA.get_message('false') }
|
||||
]
|
||||
});
|
||||
return section;
|
||||
}
|
||||
|
||||
|
||||
function user_category_section(){
|
||||
var section = IPA.rule_details_section({
|
||||
name: 'user',
|
||||
entity: that.entity,
|
||||
label: IPA.messages.objects.hbacrule.user,
|
||||
field_name: 'usercategory',
|
||||
options: [
|
||||
{ value: 'all', label: IPA.messages.objects.hbacrule.anyone },
|
||||
{ value: '',
|
||||
label: IPA.messages.objects.hbacrule.specified_users }
|
||||
],
|
||||
tables: [
|
||||
{ field_name: 'memberuser_user' },
|
||||
{ field_name: 'memberuser_group' }
|
||||
]
|
||||
});
|
||||
|
||||
section.add_field(IPA.radio_widget({
|
||||
name: 'usercategory'
|
||||
}));
|
||||
section.add_field(IPA.association_table_widget({
|
||||
id: that.entity.name+'-memberuser_user',
|
||||
name: 'memberuser_user',
|
||||
entity: that.entity,
|
||||
add_method: 'add_user',
|
||||
remove_method: 'remove_user',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
}));
|
||||
section.add_field(IPA.association_table_widget({
|
||||
id: that.entity.name+'-memberuser_group',
|
||||
name: 'memberuser_group',
|
||||
entity: that.entity,
|
||||
add_method: 'add_user',
|
||||
remove_method: 'remove_user',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
}));
|
||||
return section;
|
||||
}
|
||||
|
||||
function hostcategory_section(){
|
||||
var section = IPA.rule_details_section({
|
||||
name: 'host',
|
||||
label: IPA.messages.objects.hbacrule.host,
|
||||
entity: that.entity,
|
||||
field_name: 'hostcategory',
|
||||
options: [
|
||||
{ value: 'all', label: IPA.messages.objects.hbacrule.any_host },
|
||||
{ value: '',
|
||||
label: IPA.messages.objects.hbacrule.specified_hosts }
|
||||
],
|
||||
tables: [
|
||||
{ field_name: 'memberhost_host' },
|
||||
{ field_name: 'memberhost_hostgroup' }
|
||||
]
|
||||
});
|
||||
|
||||
section.add_field(IPA.radio_widget({
|
||||
name: 'hostcategory'
|
||||
}));
|
||||
section.add_field(IPA.association_table_widget({
|
||||
id: that.entity.name+'-memberhost_host',
|
||||
name: 'memberhost_host',
|
||||
entity: that.entity,
|
||||
add_method: 'add_host',
|
||||
remove_method: 'remove_host',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
}));
|
||||
section.add_field(IPA.association_table_widget({
|
||||
id: that.entity.name+'-memberhost_hostgroup',
|
||||
name: 'memberhost_hostgroup',
|
||||
entity: that.entity,
|
||||
add_method: 'add_host',
|
||||
remove_method: 'remove_host',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
}));
|
||||
return section;
|
||||
}
|
||||
|
||||
function servicecategory_section(){
|
||||
var section = IPA.rule_details_section({
|
||||
name: 'service',
|
||||
entity: that.entity,
|
||||
label: IPA.messages.objects.hbacrule.service,
|
||||
field_name: 'servicecategory',
|
||||
options: [
|
||||
{ value: 'all',
|
||||
label: IPA.messages.objects.hbacrule.any_service },
|
||||
{ value: '',
|
||||
label: IPA.messages.objects.hbacrule.specified_services }
|
||||
],
|
||||
tables: [
|
||||
{ field_name: 'memberservice_hbacsvc' },
|
||||
{ field_name: 'memberservice_hbacsvcgroup' }
|
||||
]
|
||||
});
|
||||
|
||||
section.add_field(IPA.radio_widget({
|
||||
name: 'servicecategory'
|
||||
}));
|
||||
section.add_field(IPA.association_table_widget({
|
||||
id: that.entity.name+'-memberservice_hbacsvc',
|
||||
name: 'memberservice_hbacsvc',
|
||||
entity: that.entity,
|
||||
add_method: 'add_service',
|
||||
remove_method: 'remove_service',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
}));
|
||||
section.add_field(IPA.association_table_widget({
|
||||
id: that.entity.name+'-memberservice_hbacsvcgroup',
|
||||
name: 'memberservice_hbacsvcgroup',
|
||||
entity: that.entity,
|
||||
add_method: 'add_service',
|
||||
remove_method: 'remove_service',
|
||||
add_title: IPA.messages.association.add.member,
|
||||
remove_title: IPA.messages.association.remove.member
|
||||
}));
|
||||
return section;
|
||||
}
|
||||
|
||||
function sourcehostcategory_section(){
|
||||
var section = IPA.rule_details_section({
|
||||
name: 'sourcehost',
|
||||
entity: that.entity,
|
||||
label: IPA.messages.objects.hbacrule.sourcehost,
|
||||
field_name: 'sourcehostcategory',
|
||||
options: [
|
||||
{ value: 'all', label: IPA.messages.objects.hbacrule.any_host },
|
||||
{ value: '',
|
||||
label: IPA.messages.objects.hbacrule.specified_hosts }
|
||||
],
|
||||
tables: [
|
||||
{ field_name: 'sourcehost_host' },
|
||||
{ field_name: 'sourcehost_hostgroup' }
|
||||
]
|
||||
});
|
||||
|
||||
section.add_field(IPA.radio_widget({
|
||||
name: 'sourcehostcategory'
|
||||
}));
|
||||
section.add_field(IPA.association_table_widget({
|
||||
id: that.entity.name+'-sourcehost_host',
|
||||
name: 'sourcehost_host',
|
||||
entity: that.entity,
|
||||
add_method: 'add_sourcehost',
|
||||
remove_method: 'remove_sourcehost',
|
||||
add_title: IPA.messages.association.add.sourcehost,
|
||||
remove_title: IPA.messages.association.remove.sourcehost
|
||||
}));
|
||||
section.add_field(IPA.association_table_widget({
|
||||
id: that.entity.name+'-sourcehost_hostgroup',
|
||||
name: 'sourcehost_hostgroup',
|
||||
entity: that.entity,
|
||||
add_method: 'add_sourcehost',
|
||||
remove_method: 'remove_sourcehost',
|
||||
add_title: IPA.messages.association.add.sourcehost,
|
||||
remove_title: IPA.messages.association.remove.sourcehost
|
||||
}));
|
||||
return section;
|
||||
}
|
||||
|
||||
that.update = function(on_success, on_error) {
|
||||
|
||||
var args = that.get_primary_key();
|
||||
|
||||
var modify_operation = {
|
||||
'execute': false,
|
||||
'command': IPA.command({
|
||||
entity: that.entity.name,
|
||||
method: 'mod',
|
||||
args: args,
|
||||
options: {all: true, rights: true}
|
||||
})
|
||||
};
|
||||
|
||||
var categories = {
|
||||
'usercategory': {
|
||||
'remove_values': false
|
||||
},
|
||||
'hostcategory': {
|
||||
'remove_values': false
|
||||
},
|
||||
'servicecategory': {
|
||||
'remove_values': false
|
||||
},
|
||||
'sourcehostcategory': {
|
||||
'remove_values': false
|
||||
}
|
||||
};
|
||||
|
||||
var member_operations = {
|
||||
'memberuser': {
|
||||
'category': 'usercategory',
|
||||
'has_values': false,
|
||||
'command': IPA.command({
|
||||
entity: that.entity.name,
|
||||
method: 'remove_user',
|
||||
args: args,
|
||||
options: {all: true, rights: true}
|
||||
})
|
||||
},
|
||||
'memberhost': {
|
||||
'category': 'hostcategory',
|
||||
'has_values': false,
|
||||
'command': IPA.command({
|
||||
entity: that.entity.name,
|
||||
method: 'remove_host',
|
||||
args: args,
|
||||
options: {all: true, rights: true}
|
||||
})
|
||||
},
|
||||
'memberservice': {
|
||||
'category': 'servicecategory',
|
||||
'has_values': false,
|
||||
'command': IPA.command({
|
||||
entity: that.entity.name,
|
||||
method: 'remove_service',
|
||||
args: args,
|
||||
options: {all: true, rights: true}
|
||||
})
|
||||
},
|
||||
'sourcehost': {
|
||||
'category': 'sourcehostcategory',
|
||||
'has_values': false,
|
||||
'command': IPA.command({
|
||||
entity: that.entity.name,
|
||||
method: 'remove_sourcehost',
|
||||
args: args,
|
||||
options: {all: true, rights: true}
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
var enable_operation = {
|
||||
'execute': false,
|
||||
'command': IPA.command({
|
||||
entity: that.entity.name,
|
||||
method: 'enable',
|
||||
args: args,
|
||||
options: {all: true, rights: true}
|
||||
})
|
||||
};
|
||||
|
||||
var record = {};
|
||||
that.save(record);
|
||||
|
||||
var sections = that.sections.values;
|
||||
for (var i=0; i<sections.length; i++) {
|
||||
var section = sections[i];
|
||||
|
||||
var section_fields = section.fields.values;
|
||||
for (var j=0; j<section_fields.length; j++) {
|
||||
var field = section_fields[j];
|
||||
|
||||
// association tables are never dirty, so call
|
||||
// is_dirty() after checking table values
|
||||
|
||||
var values = record[field.name];
|
||||
if (!values) continue;
|
||||
|
||||
var metadata = field.metadata;
|
||||
|
||||
// skip primary key
|
||||
if (metadata && metadata.primary_key) continue;
|
||||
|
||||
var p = field.name.indexOf('_');
|
||||
if (p >= 0) {
|
||||
// prepare command to remove members if needed
|
||||
var attribute = field.name.substring(0, p);
|
||||
var other_entity = field.name.substring(p+1);
|
||||
|
||||
if (values.length) {
|
||||
member_operations[attribute].command.set_option(other_entity, values.join(','));
|
||||
member_operations[attribute].has_values = true;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// skip unchanged field
|
||||
if (!field.is_dirty()) continue;
|
||||
|
||||
// check enable/disable
|
||||
if (field.name == 'ipaenabledflag') {
|
||||
if (values[0] == 'FALSE') enable_operation.command.method = 'disable';
|
||||
enable_operation.execute = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (categories[field.name]) {
|
||||
if (values[0] == 'all') {
|
||||
categories[field.name].remove_values = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (metadata) {
|
||||
if (values.length == 1) {
|
||||
modify_operation.command.set_option(field.name, values[0]);
|
||||
} else if (field.join) {
|
||||
modify_operation.command.set_option(field.name, values.join(','));
|
||||
} else {
|
||||
modify_operation.command.set_option(field.name, values);
|
||||
}
|
||||
|
||||
} else {
|
||||
if (values.length) {
|
||||
modify_operation.command.set_option('setattr', field.name+'='+values[0]);
|
||||
} else {
|
||||
modify_operation.command.set_option('setattr', field.name+'=');
|
||||
}
|
||||
for (var l=1; l<values.length; l++) {
|
||||
modify_operation.command.set_option('addattr', field.name+'='+values[l]);
|
||||
}
|
||||
}
|
||||
|
||||
modify_operation.execute = true;
|
||||
}
|
||||
}
|
||||
|
||||
var batch = IPA.batch_command({
|
||||
'name': 'hbac_details_update',
|
||||
'on_success': function(data, text_status, xhr) {
|
||||
that.refresh();
|
||||
if (on_success) on_success.call(this, data, text_status, xhr);
|
||||
},
|
||||
'on_error': function(xhr, text_status, error_thrown) {
|
||||
that.refresh();
|
||||
if (on_error) on_error.call(this, xhr, text_status, error_thrown);
|
||||
}
|
||||
});
|
||||
|
||||
for (var member_attribute in member_operations) {
|
||||
var member_operation = member_operations[member_attribute];
|
||||
if (member_operation.has_values &&
|
||||
categories[member_operation.category].remove_values) {
|
||||
batch.add_command(member_operations[member_attribute].command);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (modify_operation.execute) batch.add_command(modify_operation.command);
|
||||
if (enable_operation.execute) batch.add_command(enable_operation.command);
|
||||
|
||||
if (!batch.commands.length) {
|
||||
that.refresh();
|
||||
return;
|
||||
}
|
||||
|
||||
batch.execute();
|
||||
that.on_update_success = function(data, text_status, xhr) {
|
||||
that.refresh();
|
||||
};
|
||||
|
||||
/*initialization*/
|
||||
that.add_section(general_section());
|
||||
that.add_section(user_category_section());
|
||||
that.add_section(hostcategory_section());
|
||||
that.add_section(servicecategory_section());
|
||||
that.add_section(sourcehostcategory_section());
|
||||
|
||||
that.on_update_error = function(xhr, text_status, error_thrown) {
|
||||
that.refresh();
|
||||
};
|
||||
|
||||
return that;
|
||||
};
|
||||
|
@@ -22,84 +22,187 @@
|
||||
|
||||
/* REQUIRES: ipa.js, details.js, search.js, add.js, facet.js, entity.js */
|
||||
|
||||
IPA.rule_details_section = function(spec) {
|
||||
IPA.rule_details_widget = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
var that = IPA.details_section(spec);
|
||||
var that = IPA.composite_widget(spec);
|
||||
|
||||
that.field_name = spec.field_name;
|
||||
that.radio_name = spec.radio_name;
|
||||
that.options = spec.options || [];
|
||||
that.tables = spec.tables || [];
|
||||
that.columns = spec.columns;
|
||||
|
||||
that.init = function() {
|
||||
|
||||
that.enable_radio = IPA.radio_widget({
|
||||
name: that.radio_name,
|
||||
options: that.options
|
||||
});
|
||||
|
||||
that.widgets.add_widget(that.enable_radio);
|
||||
that.enable_radio.value_changed.attach(that.on_enable_radio_changed);
|
||||
};
|
||||
|
||||
that.on_enable_radio_changed = function(value) {
|
||||
if(value.length > 0) {
|
||||
var enabled = ('' === value[0]);
|
||||
for (var i=0; i<that.tables.length; i++) {
|
||||
var table = that.tables[i];
|
||||
|
||||
var table_widget = that.widgets.get_widget(table.name);
|
||||
table_widget.set_enabled(enabled);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
that.create = function(container) {
|
||||
|
||||
that.container = container;
|
||||
|
||||
var field = that.fields.get_field(that.field_name);
|
||||
var metadata = IPA.get_entity_param(that.entity.name, that.field_name);
|
||||
|
||||
container.append(metadata.doc+':');
|
||||
|
||||
var span = $('<span/>', {
|
||||
name: that.field_name,
|
||||
title: metadata.doc,
|
||||
//enable radios
|
||||
var param_info = IPA.get_entity_param(that.entity.name, that.radio_name);
|
||||
var title = param_info ? param_info.doc : that.radio_name;
|
||||
var enable_radio_container = $('<div/>', {
|
||||
name: that.radio_name,
|
||||
title: title,
|
||||
'class': 'field'
|
||||
}).appendTo(container);
|
||||
|
||||
enable_radio_container.append(title+': ');
|
||||
that.enable_radio.create(enable_radio_container);
|
||||
|
||||
|
||||
function update_tables(value) {
|
||||
var enabled = ('' === value);
|
||||
for (var i=0; i<that.tables.length; i++) {
|
||||
var table = that.tables[i];
|
||||
|
||||
var field = that.fields.get_field(table.field_name);
|
||||
field.set_enabled(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
if (that.options.length) {
|
||||
var category = that.fields.get_field(that.field_name);
|
||||
category.options=that.options;
|
||||
category.reset = function() {
|
||||
category.widget_reset();
|
||||
var values = category.save();
|
||||
if (values.length === 0){
|
||||
return;
|
||||
}
|
||||
var value = values[0];
|
||||
update_tables(value);
|
||||
};
|
||||
category.create(span);
|
||||
|
||||
var inputs = $('input[name='+that.field_name+']', container);
|
||||
inputs.change(function() {
|
||||
var input = $(this);
|
||||
var value = input.val();
|
||||
update_tables(value);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
//tables
|
||||
for (var j=0; j<that.tables.length; j++) {
|
||||
var table = that.tables[j];
|
||||
|
||||
metadata = IPA.get_entity_param(that.entity.name, table.field_name);
|
||||
var metadata = IPA.get_entity_param(that.entity.name, table.name);
|
||||
|
||||
var table_span = $('<span/>', {
|
||||
name: table.field_name,
|
||||
title: metadata ? metadata.doc : table.field_name,
|
||||
var table_container = $('<div/>', {
|
||||
name: table.name,
|
||||
title: metadata ? metadata.doc : table.name,
|
||||
'class': 'field'
|
||||
}).appendTo(span);
|
||||
}).appendTo(container);
|
||||
|
||||
field = that.fields.get_field(table.field_name);
|
||||
field.create(table_span);
|
||||
var widget = that.widgets.get_widget(table.name);
|
||||
widget.create(table_container);
|
||||
}
|
||||
};
|
||||
|
||||
that.init();
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
|
||||
IPA.rule_association_table_widget = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
var that = IPA.association_table_widget(spec);
|
||||
|
||||
that.external = spec.external;
|
||||
|
||||
that.enabled = spec.enabled !== undefined ? spec.enabled : true;
|
||||
|
||||
that.create_add_dialog = function() {
|
||||
|
||||
var entity_label = that.entity.metadata.label_singular;
|
||||
var pkey = IPA.nav.get_state(that.entity.name+'-pkey');
|
||||
var other_entity_label = IPA.metadata.objects[that.other_entity].label;
|
||||
|
||||
var title = that.add_title;
|
||||
title = title.replace('${entity}', entity_label);
|
||||
title = title.replace('${primary_key}', pkey);
|
||||
title = title.replace('${other_entity}', other_entity_label);
|
||||
|
||||
return IPA.rule_association_adder_dialog({
|
||||
title: title,
|
||||
pkey: pkey,
|
||||
other_entity: that.other_entity,
|
||||
attribute_member: that.attribute_member,
|
||||
entity: that.entity,
|
||||
external: that.external,
|
||||
exclude: that.values
|
||||
});
|
||||
};
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
IPA.rule_association_table_field = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
var that = IPA.field(spec);
|
||||
|
||||
that.load = function(result) {
|
||||
that.values = result[that.name] || [];
|
||||
if (that.external) {
|
||||
var external_values = result[that.external] || [];
|
||||
$.merge(that.values, external_values);
|
||||
}
|
||||
|
||||
that.widget.update(that.values);
|
||||
that.widget.unselect_all();
|
||||
};
|
||||
|
||||
that.get_update_info = function() {
|
||||
|
||||
var update_info = IPA.update_info_builder.new_update_info();
|
||||
|
||||
//association_table_widget performs basic add and remove operation
|
||||
//immediately. Rule association field test if its enabled and if not it
|
||||
//performs delete operation.
|
||||
|
||||
if (!that.widget.enabled) {
|
||||
var values = that.save();
|
||||
|
||||
if (values.length > 0) { //no need to delete if has no values
|
||||
|
||||
var command = IPA.command({
|
||||
entity: that.entity.name,
|
||||
method: that.widget.remove_method,
|
||||
args: that.entity.get_primary_key(),
|
||||
options: {all: true, rights: true}
|
||||
});
|
||||
|
||||
command.set_option(that.widget.other_entity, values.join(','));
|
||||
update_info.append_command(command, that.priority);
|
||||
}
|
||||
}
|
||||
|
||||
return update_info;
|
||||
};
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
IPA.widget_factories['rule_association_table'] = IPA.rule_association_table_widget;
|
||||
IPA.field_factories['rule_association_table'] = IPA.rule_association_table_field;
|
||||
|
||||
IPA.rule_association_adder_dialog = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
var that = IPA.association_adder_dialog(spec);
|
||||
|
||||
that.external = spec.external;
|
||||
|
||||
that.add = function() {
|
||||
var rows = that.available_table.remove_selected_rows();
|
||||
that.selected_table.add_rows(rows);
|
||||
|
||||
if (that.external) {
|
||||
var pkey_name = IPA.metadata.objects[that.other_entity].primary_key;
|
||||
var value = that.external_field.val();
|
||||
if (!value) return;
|
||||
|
||||
var record = {};
|
||||
record[pkey_name] = value;
|
||||
that.selected_table.add_record(record);
|
||||
that.external_field.val('');
|
||||
}
|
||||
};
|
||||
|
||||
return that;
|
||||
|
1249
install/ui/sudo.js
1249
install/ui/sudo.js
File diff suppressed because it is too large
Load Diff
@@ -1951,6 +1951,36 @@ IPA.details_table_section_nc = function(spec) {
|
||||
return that;
|
||||
};
|
||||
|
||||
IPA.enable_widget = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
var that = IPA.radio_widget(spec);
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
|
||||
IPA.header_widget = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
var that = IPA.widget(spec);
|
||||
|
||||
that.level = spec.level || 3;
|
||||
that.text = spec.text;
|
||||
that.description = spec.description;
|
||||
|
||||
that.create = function(container) {
|
||||
container.append($('<h'+that.level+' />', {
|
||||
text: that.text,
|
||||
title: that.description
|
||||
}));
|
||||
};
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
IPA.observer = function(spec) {
|
||||
|
||||
var that = {};
|
||||
@@ -2151,3 +2181,4 @@ IPA.widget_factories['combobox'] = IPA.combobox_widget;
|
||||
IPA.widget_factories['link'] = IPA.link_widget;
|
||||
IPA.widget_factories['details_table_section'] = IPA.details_table_section;
|
||||
IPA.widget_factories['details_table_section_nc'] = IPA.details_table_section_nc;
|
||||
IPA.widget_factories['enable'] = IPA.enable_widget;
|
||||
|
Reference in New Issue
Block a user