diff options
author | Petr Vobornik <pvoborni@redhat.com> | 2012-03-28 17:53:17 +0200 |
---|---|---|
committer | Petr Vobornik <pvoborni@redhat.com> | 2012-04-10 13:19:13 +0200 |
commit | 26abd05d5ece4ad03da5abdd3a25377594a54593 (patch) | |
tree | 8296e6eed834d0e3056b609e27ecc1101aa7f2e3 /install/ui/netgroup.js | |
parent | 184a066f4abc0ef83434f8cebbec87028258db65 (diff) | |
download | freeipa-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/netgroup.js')
-rw-r--r-- | install/ui/netgroup.js | 273 |
1 files changed, 242 insertions, 31 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); |