瀏覽代碼

[security] Adding role search functionality

Enrico Berti 11 年之前
父節點
當前提交
cfcf903
共有 2 個文件被更改,包括 27 次插入2 次删除
  1. 3 2
      apps/security/src/security/templates/hive.mako
  2. 24 0
      apps/security/static/js/hive.ko.js

+ 3 - 2
apps/security/src/security/templates/hive.mako

@@ -166,7 +166,7 @@ ${ layout.menubar(section='hive') }
           <div data-bind="visible: $root.roles().length > 0">
             <%actionbar:render>
               <%def name="search()">
-                <input id="filterInput" type="text" class="input-xlarge search-query" placeholder="${_('Search for name, groups, etc...')}">
+                <input id="filterInput" type="text" class="input-xlarge search-query" placeholder="${_('Search for name, groups, etc...')}" data-bind="value: $root.roleFilter, valueUpdate: 'afterkeydown'">
               </%def>
 
               <%def name="actions()">
@@ -189,7 +189,7 @@ ${ layout.menubar(section='hive') }
               <th width="20%">${ _('Grantor Principal') }</th>
               <th width="3%"></th>
             </thead>
-            <tbody data-bind="foreach: $root.roles">
+            <tbody data-bind="foreach: $root.filteredRoles">
               <tr>
                 <td class="center" data-bind="click: handleSelect" style="cursor: default">
                   <div data-bind="css: { hueCheckbox: true, 'fa': true, 'fa-check': selected }"></div>
@@ -401,6 +401,7 @@ ${ tree.import_templates(itemClick='$root.assist.setPath', iconClick='$root.assi
 
       $("#selectedGroup").select2("val", "");
       $("#selectedGroup").change(function() { viewModel.list_sentry_roles_by_group(); });
+
     });
 </script>
 

+ 24 - 0
apps/security/static/js/hive.ko.js

@@ -588,6 +588,30 @@ var HiveViewModel = function (initial) {
 
   // Models
   self.roles = ko.observableArray();
+  self.roleFilter = ko.observable("");
+  self.filteredRoles = ko.computed(function () {
+    var _filter = self.roleFilter().toLowerCase();
+    if (!_filter) {
+      return self.roles();
+    } else {
+      return ko.utils.arrayFilter(self.roles(), function (role) {
+        var _inGroups = false;
+        role.groups().forEach(function (group) {
+          if (group.toLowerCase().indexOf(_filter) > -1) {
+            _inGroups = true;
+          }
+        });
+        var _inPrivileges = false;
+        role.privileges().forEach(function (priv) {
+          if (priv.dbName().toLowerCase().indexOf(_filter) > -1 || priv.tableName().toLowerCase().indexOf(_filter) > -1) {
+            _inPrivileges = true;
+          }
+        });
+        return role.name().toLowerCase().indexOf(_filter) > -1 || role.grantorPrincipal().toLowerCase().indexOf(_filter) > -1 || _inGroups || _inPrivileges;
+      });
+    }
+  }, self);
+
   self.availableHadoopGroups = ko.observableArray();
   self.assist = new Assist(self);