summaryrefslogtreecommitdiffstats
path: root/install/ui
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2012-03-28 17:53:17 +0200
committerPetr Vobornik <pvoborni@redhat.com>2012-04-10 13:19:13 +0200
commit26abd05d5ece4ad03da5abdd3a25377594a54593 (patch)
tree8296e6eed834d0e3056b609e27ecc1101aa7f2e3 /install/ui
parent184a066f4abc0ef83434f8cebbec87028258db65 (diff)
downloadfreeipa-26abd05d5ece4ad03da5abdd3a25377594a54593.tar.gz
freeipa-26abd05d5ece4ad03da5abdd3a25377594a54593.tar.xz
freeipa-26abd05d5ece4ad03da5abdd3a25377594a54593.zip
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
Diffstat (limited to 'install/ui')
-rw-r--r--install/ui/netgroup.js273
-rw-r--r--install/ui/test/data/ipa_init.json13
2 files changed, 254 insertions, 32 deletions
diff --git a/install/ui/netgroup.js b/install/ui/netgroup.js
index d54fdfd52..05f9d0ddc 100644
--- a/install/ui/netgroup.js
+++ b/install/ui/netgroup.js
@@ -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);
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
index 6eed01e92..7dc1344d1 100644
--- a/install/ui/test/data/ipa_init.json
+++ b/install/ui/test/data/ipa_init.json
@@ -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",