Reworked netgroup Web UI to allow setting user/host category

This patch is changing netgroup web ui to look more like hbac or sudo rule UI. This change allows to define and display user category, host category and external host.

The core of the change is changing member attributes (user, group, host, hostgroup) to use rule_details_widget instead of separate association facets. In host case it allows to display and add external hosts.

https://fedorahosted.org/freeipa/ticket/2578
This commit is contained in:
Petr Vobornik
2012-03-28 17:53:17 +02:00
parent 184a066f4a
commit 26abd05d5e
3 changed files with 265 additions and 32 deletions

View File

@@ -22,7 +22,10 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, facet.js, entity.js */
IPA.netgroup = {};
IPA.netgroup = {
remove_method_priority: IPA.config.default_priority - 1,
enable_priority: IPA.config.default_priority + 1
};
IPA.netgroup.entity = function(spec) {
@@ -31,42 +34,17 @@ IPA.netgroup.entity = function(spec) {
that.init = function() {
that.entity_init();
that.builder.search_facet({
that.builder.facet_groups(['settings', 'member', 'memberof']).
search_facet({
columns: [
'cn',
'description'
]
}).
details_facet({
sections: [
{
name: 'identity',
fields: [
'cn',
{
type: 'textarea',
name: 'description'
},
'nisdomainname'
]
}
]
}).
association_facet({
name: 'memberhost_host',
facet_group: 'member'
}).
association_facet({
name: 'memberhost_hostgroup',
facet_group: 'member'
}).
association_facet({
name: 'memberuser_user',
facet_group: 'member'
}).
association_facet({
name: 'memberuser_group',
facet_group: 'member'
factory: IPA.netgroup.details_facet,
entity: that,
command_mode: 'info'
}).
association_facet({
name: 'memberof_netgroup',
@@ -87,4 +65,237 @@ IPA.netgroup.entity = function(spec) {
return that;
};
IPA.netgroup.details_facet = function(spec) {
var entity_name = spec.entity.name;
//
// Identity
//
spec.fields = [
{
name: 'cn',
widget: 'identity.cn'
},
{
type: 'textarea',
name: 'description',
widget: 'identity.description'
},
{
name: 'nisdomainname',
widget: 'identity.nisdomainname'
}
];
spec.widgets = [
{
type: 'details_table_section',
name: 'identity',
label: IPA.messages.details.general,
widgets: [
{
name: 'cn'
},
{
type: 'textarea',
name: 'description'
},
{
name: 'nisdomainname',
widget: 'general.nisdomainname'
}
]
}
];
//
// 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.netgroup.remove_method_priority
},
{
type: 'rule_association_table',
name: 'memberuser_group',
widget: 'user.rule.memberuser_group',
priority: IPA.netgroup.remove_method_priority
}
);
spec.widgets.push(
{
factory: IPA.collapsible_section,
name: 'user',
label: IPA.messages.objects.netgroup.user,
widgets: [
{
factory: IPA.rule_details_widget,
name: 'rule',
radio_name: 'usercategory',
options: [
{ value: 'all',
label: IPA.messages.objects.netgroup.anyone },
{ value: '',
label: IPA.messages.objects.netgroup.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_member',
remove_method: 'remove_member',
add_title: IPA.messages.association.add.member,
remove_title: IPA.messages.association.remove.member,
columns: [
{
name: 'memberuser_user',
label: IPA.messages.objects.netgroup.users
}
]
},
{
type: 'rule_association_table',
id: entity_name+'-memberuser_group',
name: 'memberuser_group',
add_method: 'add_member',
remove_method: 'remove_member',
add_title: IPA.messages.association.add.member,
remove_title: IPA.messages.association.remove.member,
columns: [
{
name: 'memberuser_group',
label: IPA.messages.objects.netgroup.usergroups
}
]
}
]
}
]
}
);
//
// 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.netgroup.remove_method_priority,
external: 'externalhost'
},
{
type: 'rule_association_table',
name: 'memberhost_hostgroup',
widget: 'host.rule.memberhost_hostgroup',
priority: IPA.netgroup.remove_method_priority
}
);
spec.widgets.push(
{
factory: IPA.collapsible_section,
name: 'host',
label: IPA.messages.objects.netgroup.host,
widgets: [
{
factory: IPA.rule_details_widget,
name: 'rule',
radio_name: 'hostcategory',
options: [
{
'value': 'all',
'label': IPA.messages.objects.netgroup.any_host
},
{
'value': '',
'label': IPA.messages.objects.netgroup.specified_hosts
}
],
tables: [
{ 'name': 'memberhost_host' },
{ 'name': 'memberhost_hostgroup' }
],
widgets: [
{
type: 'rule_association_table',
id: entity_name+'-memberhost_host',
name: 'memberhost_host',
add_method: 'add_member',
remove_method: 'remove_member',
external: 'externalhost',
add_title: IPA.messages.association.add.member,
remove_title: IPA.messages.association.remove.member,
columns: [
{
name: 'memberhost_host',
label: IPA.messages.objects.netgroup.hosts
},
{
name: 'externalhost',
label: IPA.messages.objects.netgroup.external,
formatter: IPA.boolean_formatter(),
width: '200px'
}
]
},
{
type: 'rule_association_table',
id: entity_name+'-memberhost_hostgroup',
name: 'memberhost_hostgroup',
add_method: 'add_member',
remove_method: 'remove_member',
add_title: IPA.messages.association.add.member,
remove_title: IPA.messages.association.remove.member,
columns: [
{
name: 'memberhost_hostgroup',
label: IPA.messages.objects.netgroup.hostgroups
}
]
}
]
}
]
}
);
var that = IPA.details_facet(spec);
that.update_on_success = function(data, text_status, xhr) {
that.refresh();
that.on_update.notify();
};
that.update_on_error = function(xhr, text_status, error_thrown) {
that.refresh();
};
return that;
};
IPA.register('netgroup', IPA.netgroup.entity);

View File

@@ -312,7 +312,18 @@
"identity": "Kerberos Ticket Policy"
},
"netgroup": {
"identity": "Netgroup Settings"
"any_host": "Any Host",
"anyone": "Anyone",
"external": "External",
"host": "Host",
"hostgroups": "Host Groups",
"hosts": "Hosts",
"identity": "Netgroup Settings",
"specified_hosts": "Specified Hosts and Groups",
"specified_users": "Specified Users and Groups",
"user": "User",
"usergroups": "User Groups",
"users": "Users"
},
"permission": {
"identity": "Identity",