浏览代码

[security] Filter by a certain group if selected or show all of them

Romain Rigaux 11 年之前
父节点
当前提交
fad2068

+ 2 - 1
apps/security/src/security/api/hive.py

@@ -28,7 +28,8 @@ def list_sentry_roles_by_group(request):
   result = {'status': -1, 'message': 'Error'}
 
   try:
-    roles = get_api(request.user).list_sentry_roles_by_group()
+    groupName = request.POST['groupName'] if request.POST['groupName'] else None
+    roles = get_api(request.user).list_sentry_roles_by_group(groupName)
     result['roles'] = sorted(roles, key= lambda role: role['name'])
     result['message'] = ''
     result['status'] = 0

+ 8 - 8
apps/security/src/security/templates/hive.mako

@@ -78,12 +78,11 @@ ${ layout.menubar(section='hive') }
           <li class="active"><a href="javascript:void(0)" data-toggleSection="edit"><i class="fa fa-sitemap  fa-rotate-270"></i> ${ _('Browse') }</a></li>
           <li><a href="javascript:void(0)" data-toggleSection="roles"><i class="fa fa-cubes"></i> ${ _('Roles') }</a></li>
           <li class="nav-header"><i class="fa fa-group"></i> ${ _('Groups') }
-            </br>
-            <input type="checkbox" checked> All
-            </br>
-            <select data-bind="options: $root.selectableHadoopGroups, select2: { update: $data.action, type: 'action'}" size="10" multiple="true" style="width: 100%"></select>
-          </li>          
-
+            <div>
+            <br/>
+             <select id="selectedGroup" data-bind="options: $root.selectableHadoopGroups, select2: { update: $data.action, type: 'action', allowClear: true }" style="width: 100%"></select>
+            </div>
+          </li>
         </ul>
       </div>
     </div>
@@ -262,7 +261,6 @@ ${ layout.menubar(section='hive') }
       <br/>
       Groups
       <select data-bind="options: $root.selectableHadoopGroups, selectedOptions: groups, select2: { update: groups, type: 'group'}" size="5" multiple="true" style="width: 120px"></select>
-
     </p>
   </div>
   <div class="modal-footer">
@@ -288,7 +286,7 @@ ${ tree.import_templates(itemClick='$root.assist.setPath', iconClick='$root.assi
 <script src="/security/static/js/hive.ko.js" type="text/javascript" charset="utf-8"></script>
 
 <script src="/static/ext/js/moment.min.js" type="text/javascript" charset="utf-8"></script>
-  <script src="/static/js/jquery.hiveautocomplete.js" type="text/javascript" charset="utf-8"></script>
+<script src="/static/js/jquery.hiveautocomplete.js" type="text/javascript" charset="utf-8"></script>
 
   <script type="text/javascript" charset="utf-8">
     var viewModel = new HiveViewModel(${ initial | n,unicode });
@@ -387,6 +385,8 @@ ${ tree.import_templates(itemClick='$root.assist.setPath', iconClick='$root.assi
         show: false
       });
 
+      $("#selectedGroup").select2("val", "");
+      $("#selectedGroup").change(function() { viewModel.list_sentry_roles_by_group(); });
     });
 </script>
 

+ 17 - 10
apps/security/static/js/hive.ko.js

@@ -558,8 +558,7 @@ var HiveViewModel = function (initial) {
     });
     return _users.sort();
   }, self);
-
-
+  
   self.selectAllRoles = function () {
     self.allRolesSelected(!self.allRolesSelected());
     ko.utils.arrayForEach(self.roles(), function (role) {
@@ -616,14 +615,22 @@ var HiveViewModel = function (initial) {
   };
 
   self.list_sentry_roles_by_group = function () {
-    $.getJSON('/security/api/hive/list_sentry_roles_by_group', function (data) {
-      if (typeof data.status !== "undefined" && data.status == -1) {
-        $(document).trigger("error", data.message);
-      }
-      else {
-        $.each(data.roles, function (index, item) {
-          self.roles.push(new Role(self, item));
-        });
+    $.ajax({
+      type: "POST",
+      url: "/security/api/hive/list_sentry_roles_by_group",
+      data: {
+        'groupName': $('#selectedGroup').val()
+      },
+      success: function (data) {
+        if (typeof data.status !== "undefined" && data.status == -1) {
+          $(document).trigger("error", data.message);
+        } 
+        else {
+          self.roles.removeAll();
+          $.each(data.roles, function (index, item) {
+            self.roles.push(new Role(self, item));
+          });
+        }
       }
     }).fail(function (xhr, textStatus, errorThrown) {
       $(document).trigger("error", xhr.responseText);

+ 1 - 1
desktop/libs/libsentry/src/libsentry/api.py

@@ -95,7 +95,7 @@ class SentryApi(object):
 
 
   def list_sentry_roles_by_group(self, groupName=None):
-    response = self.client.list_sentry_roles_by_group()
+    response = self.client.list_sentry_roles_by_group(groupName)
 
     if response.status.value == 0:
       roles = []