Эх сурвалжийг харах

[security] Bulk add HDFS ACLs

Romain Rigaux 11 жил өмнө
parent
commit
f53c6e04ac

+ 15 - 0
apps/security/src/security/api/hdfs.py

@@ -111,6 +111,21 @@ def bulk_delete_acls(request):
   return HttpResponse(json.dumps({'status': 0}), mimetype="application/json")
 
 
+def bulk_add_acls(request):
+  path = request.POST.get('path')
+  acls = json.loads(request.POST.get('acls'))
+  checked_paths = json.loads(request.POST.get('checkedPaths'))  
+  
+  try:
+    checked_paths = [path['path'] for path in checked_paths if path['path'] != path] # Don't touch current path
+    for path in checked_paths:
+      _modify_acl_entries(request.fs, path, [acl for acl in acls if acl['status'] == '']) # Only saved ones
+  except Exception, e:
+    raise PopupException(unicode(str(e.message), "utf8"))
+
+  return HttpResponse(json.dumps({'status': 0}), mimetype="application/json")
+
+
 def _modify_acl_entries(fs, path, acls):
   aclspec = ','.join([_get_acl(acl) for acl in acls])
   return fs.modify_acl_entries(path, aclspec)

+ 7 - 3
apps/security/src/security/templates/hdfs.mako

@@ -116,9 +116,13 @@ ${ layout.menubar(section='hdfs') }
                     <i class="fa fa-group" title="List of groups in popover for this user?"></i>
                   </div>                  
                   <div>
-                    <i class="fa fa-save"></i>
-                    <i class="fa fa-copy"></i>
-                    <a href="javascript: void(0)" data-bind="click: $root.assist.bulkDeleteAcls" title="${ _('Remove ACLs from selected items') }">
+                    <a href="javascript: void(0)" data-bind="click: $root.assist.bulkAddAcls" title="${ _('Add current ACL to selection') }">
+                      <i class="fa fa-plus"></i>
+                    </a>
+                    <a href="javascript: void(0)" data-bind="click: $root.assist.bulkAddAcls" title="${ _('Sync current ACL to selection') }">
+                      <i class="fa fa-copy"></i>
+                    </a>
+                    <a href="javascript: void(0)" data-bind="click: $root.assist.bulkDeleteAcls" title="${ _('Remove ACLs of selection') }">
                       <i class="fa fa-times"></i>
                     </a>
                     <input type="checkbox"></input> ${ _('Recursive') }

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

@@ -27,7 +27,7 @@ ${ commonheader(_('Hadoop Security'), "security", user) | n,unicode }
 ${ layout.menubar(section='hive') }
 
 <script type="text/html" id="role">
-  <div class="acl-block-title"><i class="fa fa-cubes"></i> <span data-bind="text: name"></span></div>
+  <div class="acl-block-title"><i class="fa fa-cube"></i> <span data-bind="text: name"></span></div>
   <div data-bind="template: { name: 'privilege', foreach: privileges }"></div>
   <div class="acl-block acl-actions">
     <span class="pointer" data-bind="click: addPrivilege" title="${ _('Add privilege') }"><i class="fa fa-plus"></i></span>

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

@@ -30,6 +30,7 @@ urlpatterns += patterns('security.api.hdfs',
   url(r'^api/hdfs/get_acls$', 'get_acls', name='get_acls'),
   url(r'^api/hdfs/update_acls', 'update_acls', name='update_acls'),
   url(r'^api/hdfs/bulk_delete_acls', 'bulk_delete_acls', name='bulk_delete_acls'),
+  url(r'^api/hdfs/bulk_add_acls', 'bulk_add_acls', name='bulk_add_acls'),
 )
 
 

+ 19 - 0
apps/security/static/js/hdfs.ko.js

@@ -505,6 +505,25 @@ var Assist = function (vm, assist) {
       $(document).trigger("error", JSON.parse(xhr.responseText).message);
     });
   }
+
+  self.bulkAddAcls = function() {
+	$(".jHueNotify").hide();
+	logGA('bulkAddAcls');
+
+	var checkedPaths = self.getCheckedItems();
+	
+	$.post("/security/api/hdfs/bulk_add_acls", {
+        'path': self.path(),
+        'acls': ko.mapping.toJSON(self.acls()),
+        'checkedPaths': ko.mapping.toJSON(checkedPaths),
+      }, function (data) {
+        self.refreshTree();
+        $(document).trigger("info", 'Done!');
+      }
+    ).fail(function (xhr, textStatus, errorThrown) {
+      $(document).trigger("error", JSON.parse(xhr.responseText).message);
+    });
+  }
 }