Преглед изворни кода

[security] Added support from doAs from a non visible path

Enrico Berti пре 11 година
родитељ
комит
448bb06
2 измењених фајлова са 37 додато и 25 уклоњено
  1. 1 1
      apps/security/src/security/api/hdfs.py
  2. 36 24
      apps/security/static/js/hdfs.ko.js

+ 1 - 1
apps/security/src/security/api/hdfs.py

@@ -54,7 +54,7 @@ def list_hdfs(request, path):
     else:
       json_response = display(request, path)
   except:
-    json_response = HttpResponse(json.dumps({'files': [], 'page': {}}), mimetype="application/json") # AccessControlException: Permission denied: user=test, access=READ_EXECUTE, inode="/tmp/dir":romain:supergroup:drwxr-xr-x:group::r-x,group:bob:---,group:test:---,default:user::rwx,default:group::r--,default:mask::r--,default:other::rwx (error 403)
+    json_response = HttpResponse(json.dumps({'files': [], 'page': {}, 'status': 403}), mimetype="application/json") # AccessControlException: Permission denied: user=test, access=READ_EXECUTE, inode="/tmp/dir":romain:supergroup:drwxr-xr-x:group::r-x,group:bob:---,group:test:---,default:user::rwx,default:group::r--,default:mask::r--,default:other::rwx (error 403)
 
   if json.loads(request.GET.get('isDiffMode', 'false')):
     request.doas = 'hdfs'

+ 36 - 24
apps/security/static/js/hdfs.ko.js

@@ -116,6 +116,7 @@ var Assist = function (vm, assist) {
   self.pagenum = ko.observable(1);
   self.fromLoadMore = false;
   self.fromRebuildTree = false;
+  self.excludePath = "";
 
   self.acls = ko.observableArray();
   self.originalAcls = ko.observableArray();
@@ -276,14 +277,17 @@ var Assist = function (vm, assist) {
   self.refreshTree = function (force) {
     self.growingTree(jQuery.extend(true, {}, self.initialGrowingTree));
     Object.keys(self.treeAdditionalData).forEach(function (path) {
-      if (typeof force == "boolean" && force) {
-        self.fetchPath(path);
-      } else {
-        if (self.treeAdditionalData[path].loaded) {
+      if (path.indexOf(self.excludePath) > -1 ){
+        if (typeof force == "boolean" && force) {
           self.fetchPath(path);
+        } else {
+          if (self.treeAdditionalData[path].loaded) {
+            self.fetchPath(path);
+          }
         }
       }
     });
+    self.excludePath = "";
   }
 
   self.rebuildTree = function (leaf, paths) {
@@ -349,28 +353,36 @@ var Assist = function (vm, assist) {
         'isDiffMode': self.isDiffMode()
       },
       function (data) {
-        self.loadParents(data.breadcrumbs);
-        if (data['files'] && data['files'][0] && data['files'][0]['type'] == 'dir') { // Hack for now
-          $.each(data.files, function (index, item) {
-            self.convertItemToObject(item);
-          });
-        }
-        else {
-          self.convertItemToObject(data);
-        }
-        self.getTreeAdditionalDataForPath(_path).loaded = true;
-        if (data.page != null && data.page.number != null){
-          self.updatePathProperty(self.growingTree(), _path, "page", data.page);
-        }
-        if (typeof loadCallback != "undefined"){
-          loadCallback(data);
-        }
-        else {
+        if (data.status != null && data.status == 403){
+          self.updatePathProperty(self.growingTree(), _path, "nodes", []);
+          self.excludePath = _path;
           self.loadData(self.growingTree());
         }
-        if (typeof optionalPath == "undefined"){
-          self.getAcls();
+        else {
+          self.loadParents(data.breadcrumbs);
+          if (data['files'] && data['files'][0] && data['files'][0]['type'] == 'dir') { // Hack for now
+            $.each(data.files, function (index, item) {
+              self.convertItemToObject(item);
+            });
+          }
+          else {
+            self.convertItemToObject(data);
+          }
+          self.getTreeAdditionalDataForPath(_path).loaded = true;
+          if (data.page != null && data.page.number != null){
+            self.updatePathProperty(self.growingTree(), _path, "page", data.page);
+          }
+          if (typeof loadCallback != "undefined"){
+            loadCallback(data);
+          }
+          else {
+            self.loadData(self.growingTree());
+          }
+          if (typeof optionalPath == "undefined"){
+            self.getAcls();
+          }
         }
+
       }).fail(function (xhr, textStatus, errorThrown) {
         $(document).trigger("error", xhr.responseText);
       });
@@ -449,7 +461,7 @@ var HdfsViewModel = function (initial) {
 
   self.doAs = ko.observable(initial.user);
   self.doAs.subscribe(function () {
-	self.assist.refreshTree();
+	  self.assist.refreshTree();
   });
   self.availableHadoopUsers = ko.observableArray();
   self.availableHadoopGroups = ko.observableArray();