浏览代码

[security] Bulk add Sentry privileges

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

+ 36 - 0
apps/security/src/security/api/hive.py

@@ -251,6 +251,42 @@ def bulk_delete_privileges(request):
   return HttpResponse(json.dumps(result), mimetype="application/json")
 
 
+def bulk_add_privileges(request):
+  result = {'status': -1, 'message': 'Error'}
+
+  try:
+    privileges = json.loads(request.POST['privileges'])
+    checkedPaths = json.loads(request.POST['checkedPaths'])
+    recursive = json.loads(request.POST['recursive'])
+    authorizableHierarchy = json.loads(request.POST['authorizableHierarchy'])
+
+    privileges = [privilege for privilege in privileges if privilege['status'] == '']
+
+    for path in [path['path'] for path in checkedPaths]:
+      if '.' in path:
+        db, table = path.split('.')
+      else:
+        db, table = path, ''
+      privilegeScope = 'TABLE' if table else 'DATABASE' if db else 'SERVER'
+      authorizableHierarchy.update({
+        'db': db,
+        'table': table, 
+      })
+
+      for privilege in privileges:
+        privilege['dbName'] = db
+        privilege['tableName'] = table
+        privilege['privilegeScope'] = privilegeScope        
+        _hive_add_privileges(request.user, {'name': privilege['roleName']}, [privilege])      
+
+    result['message'] = _('Privileges added.')
+    result['status'] = 0
+  except Exception, e:
+    result['message'] = unicode(str(e), "utf8")
+
+  return HttpResponse(json.dumps(result), mimetype="application/json")
+
+
 def rename_sentry_privilege(request):
   result = {'status': -1, 'message': 'Error'}
 

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

@@ -144,7 +144,7 @@ ${ layout.menubar(section='hive') }
                     <i class="fa fa-group" title="${ _('List of groups in popover for this user?') }"></i>
                   </div>
                   <div>
-                    <a href="javascript: void(0)" data-bind="click: $root.assist.bulkAddAcls" title="${ _('Add current current privileges to checkbox selection') }">
+                    <a href="javascript: void(0)" data-bind="click: $root.bulk_add_privileges" title="${ _('Add current current privileges to checkbox selection') }">
                       <i class="fa fa-plus"></i>
                     </a>
                     <a href="javascript: void(0)" data-bind="click: $root.assist.bulkSyncAcls" title="${ _('Replace checkbox selection with current privileges') }">

+ 0 - 3
apps/security/src/security/templates/layout.mako

@@ -56,9 +56,6 @@ def is_selected(section, matcher):
       <div class="navbar-inner">
         <div class="container-fluid">
           <div class="nav-collapse">
-##			<div class="pull-right" style="padding-right:50px; padding-top:10px">
-##              <button type="button" title="${ _('Edit') }" rel="tooltip" data-placement="bottom" data-bind="css: {'btn': true, 'btn-inverse': true}"><i class="fa fa-pencil"></i></button>
-##			</div>
             <ul class="nav">
               <li class="currentApp">
                 <a href="/${app_name}">

+ 1 - 0
apps/security/src/security/urls.py

@@ -46,6 +46,7 @@ urlpatterns += patterns('security.api.hive',
   url(r'^api/hive/create_role$', 'create_role', name='create_role'),
   url(r'^api/hive/save_privileges$', 'save_privileges', name='save_privileges'),
   url(r'^api/hive/bulk_delete_privileges', 'bulk_delete_privileges', name='bulk_delete_privileges'),
+  url(r'^api/hive/bulk_add_privileges', 'bulk_add_privileges', name='bulk_add_privileges'),
   
   url(r'^api/hive/rename_sentry_privilege', 'rename_sentry_privilege', name='rename_sentry_privilege'),  
 )

+ 20 - 1
apps/security/static/js/hive.ko.js

@@ -259,7 +259,7 @@ var Assist = function (vm) {
 
   self.isDiffMode = ko.observable(false);
   self.isDiffMode.subscribe(function () {
-    //self.refreshTree();
+    self.refreshTree();
   });
 
   self.isLoadingTree = ko.observable(false);
@@ -848,6 +848,25 @@ var HiveViewModel = function (initial) {
       $(document).trigger("error", xhr.responseText);
     });
   }  
+
+  self.bulk_add_privileges = function (role) {
+    $(".jHueNotify").hide();
+    var checkedPaths = self.assist.getCheckedItems();
+    $.post("/security/api/hive/bulk_add_privileges", {
+      'privileges': ko.mapping.toJSON(self.assist.privileges),
+      'authorizableHierarchy': ko.mapping.toJSON(_create_authorizable_from_ko()),
+      'checkedPaths': ko.mapping.toJSON(checkedPaths),
+      'recursive': ko.mapping.toJSON(self.recursive()),
+    }, function (data) {
+      if (data.status == 0) {
+        self.list_sentry_privileges_by_authorizable(); // Refresh
+      } else {
+        $(document).trigger("error", data.message);
+      }
+    }).fail(function (xhr, textStatus, errorThrown) {
+      $(document).trigger("error", xhr.responseText);
+    });
+  } 
   
   self.fetchUsers = function () {
     $.getJSON('/desktop/api/users/autocomplete', {