浏览代码

HUE-2467 [fb] Sentry NameNode plugin integration

Disabled change permissions and chown is the folder is sentry managed
Enrico Berti 11 年之前
父节点
当前提交
2ace338

+ 5 - 2
apps/filebrowser/src/filebrowser/templates/listdir.mako

@@ -62,9 +62,9 @@ ${ fb_components.menubar() }
               <li><a href="#" title="${_('Download')}" data-bind="visible: !inTrash() && selectedFiles().length == 1 && selectedFile().type == 'file', click: downloadFile"><i class="fa fa-arrow-circle-o-down"></i> ${_('Download')}</a></li>
               <li class="divider"></li>
               %if is_fs_superuser:
-              <li><a href="#" title="${_('Change owner/group')}" data-bind="visible: !inTrash(), click: changeOwner, enable: selectedFiles().length > 0"><i class="fa fa-user"></i> ${_('Change owner / group')}</a></li>
+              <li data-bind="css: {'disabled': isCurrentDirSentryManaged }"><a href="#" data-bind="visible: !inTrash(), click: changeOwner, enable: selectedFiles().length > 0"><i class="fa fa-user"></i> ${_('Change owner / group')}</a></li>
               %endif
-              <li><a href="#" title="${_('Change permissions')}" data-bind="visible: !inTrash(), click: changePermissions, enable: selectedFiles().length > 0"><i class="fa fa-list-alt"></i> ${_('Change permissions')}</a></li>
+              <li data-bind="css: {'disabled': isCurrentDirSentryManaged }"><a href="#" data-bind="visible: !inTrash(), click: changePermissions, enable: selectedFiles().length > 0"><i class="fa fa-list-alt"></i> ${_('Change permissions')}</a></li>
             </ul>
           </div>
           <button class="btn fileToolbarBtn" title="${_('Restore from trash')}" data-bind="visible: inRestorableTrash(), click: restoreTrashSelected, enable: selectedFiles().length > 0 && isCurrentDirSelected().length == 0"><i class="fa fa-cloud-upload"></i> ${_('Restore')}</button>
@@ -119,6 +119,9 @@ ${ fb_components.menubar() }
       <div class="alert alert-warn" data-bind="visible: inTrash">
         ${ _("This is Hadoop trash. Files will be under a checkpoint, or timestamp named, directory.") }
       </div>
+      <div class="alert alert-warn" data-bind="visible: isCurrentDirSentryManaged">
+        ${ _('The permissions for this folder are managed by the Sentry Namenode plugin.') }
+      </div>
 
       % if breadcrumbs:
         ${fb_components.breadcrumbs(path, breadcrumbs, True)}

+ 70 - 63
apps/filebrowser/src/filebrowser/templates/listdir_components.mako

@@ -59,7 +59,7 @@ from django.utils.translation import ugettext as _
       <tr data-bind="visible: files().length === 0 && !isLoading()">
         <td colspan="8">
           <div class="alert">
-            There are no files matching the search criteria.
+            ${_('There are no files matching the search criteria.')}
           </div>
         </td>
       </tr>
@@ -418,9 +418,9 @@ from django.utils.translation import ugettext as _
     <li><a href="#" title="${_('Download')}" data-bind="visible: !$root.inTrash() && $root.selectedFiles().length == 1 && selectedFile().type == 'file', click: $root.downloadFile"><i class="fa fa-arrow-circle-o-down"></i> ${_('Download')}</a></li>
     <li class="divider"></li>
     %if is_fs_superuser:
-    <li><a href="#" title="${_('Change owner/group')}" data-bind="visible: !$root.inTrash(), click: $root.changeOwner, enable: $root.selectedFiles().length > 0"><i class="fa fa-user"></i> ${_('Change owner / group')}</a></li>
+    <li data-bind="css: {'disabled': $root.isCurrentDirSentryManaged }"><a href="#" data-bind="visible: !$root.inTrash(), click: $root.changeOwner, enable: $root.selectedFiles().length > 0"><i class="fa fa-user"></i> ${_('Change owner / group')}</a></li>
     %endif
-    <li><a href="#" title="${_('Change permissions')}" data-bind="visible: !$root.inTrash(), click: $root.changePermissions, enable: $root.selectedFiles().length > 0"><i class="fa fa-list-alt"></i> ${_('Change permissions')}</a></li>
+    <li data-bind="css: {'disabled': $root.isCurrentDirSentryManaged }"><a href="#" data-bind="visible: !$root.inTrash(), click: $root.changePermissions, enable: $root.selectedFiles().length > 0"><i class="fa fa-list-alt"></i> ${_('Change permissions')}</a></li>
     <li class="divider"></li>
     <li><a href="#"  data-bind="enable: $root.selectedFiles().length > 0 && isCurrentDirSelected().length == 0,
     click: $root.trashSelected"><i class="fa fa-times"></i> ${_('Move to trash')}</a></li>
@@ -473,15 +473,15 @@ from django.utils.translation import ugettext as _
       </td>
       <td>
         %if is_fs_superuser:
-        <span data-bind="text: stats.group, visible: ! selected()"></span>
-        <a href="#" rel="tooltip" title="${_('Change group')}" data-original-title="${_('Change group')}" data-bind="text: stats.group, visible: ! $root.inTrash() && selected(), click: $root.changeOwner"></a>
+        <span data-bind="text: stats.group, visible: ! selected() || $root.isCurrentDirSentryManaged()"></span>
+        <a href="#" rel="tooltip" title="${_('Change group')}" data-original-title="${_('Change group')}" data-bind="text: stats.group, visible: ! $root.inTrash() && selected() && ! $root.isCurrentDirSentryManaged(), click: $root.changeOwner"></a>
         %else:
         <span data-bind="text: stats.group"></span>
         %endif
       </td>
       <td>
-        <span data-bind="text: permissions, visible: ! selected()"></span>
-        <a href="#" rel="tooltip" title="${_('Change permissions')}" data-bind="text: permissions, visible: ! $root.inTrash() && selected(), click: $root.changePermissions" data-original-title="${_('Change permissions')}"></a>
+        <span data-bind="text: permissions, visible: ! selected() || $root.isCurrentDirSentryManaged()"></span>
+        <a href="#" rel="tooltip" title="${_('Change permissions')}" data-bind="text: permissions, visible: ! $root.inTrash() && selected() && ! $root.isCurrentDirSentryManaged(), click: $root.changePermissions" data-original-title="${_('Change permissions')}"></a>
       </td>
       <td data-bind="text: stats.mtime" style="white-space: nowrap;"></td>
     </tr>
@@ -753,6 +753,7 @@ from django.utils.translation import ugettext as _
       self.sortBy = ko.observable("name");
       self.sortDescending = ko.observable(false);
       self.searchQuery = ko.observable("");
+      self.isCurrentDirSentryManaged = ko.observable(false);
 
       self.filesSorting = function (l, r) {
         if (l.name == ".." && r.name == "."){
@@ -855,7 +856,7 @@ from django.utils.translation import ugettext as _
             return false;
           }
 
-          self.updateFileList(data.files, data.page, data.breadcrumbs, data.current_dir_path);
+          self.updateFileList(data.files, data.page, data.breadcrumbs, data.current_dir_path, data.is_sentry_managed);
 
           if ($("#hueBreadcrumbText").is(":visible")) {
             $(".hueBreadcrumb").show();
@@ -865,9 +866,11 @@ from django.utils.translation import ugettext as _
         });
       };
 
-      self.updateFileList = function (files, page, breadcrumbs, currentDirPath) {
+      self.updateFileList = function (files, page, breadcrumbs, currentDirPath, isSentryManaged) {
         $(".tooltip").hide();
 
+        self.isCurrentDirSentryManaged(isSentryManaged);
+
         self.page(new Page(page));
 
         self.files(ko.utils.arrayMap(files, function (file) {
@@ -1054,79 +1057,83 @@ from django.utils.translation import ugettext as _
       };
 
       self.changeOwner = function (data, event) {
-        var paths = [];
-        event.preventDefault();
-        event.stopPropagation();
+        if (!self.isCurrentDirSentryManaged()) {
+          var paths = [];
+          event.preventDefault();
+          event.stopPropagation();
 
-        $(self.selectedFiles()).each(function (index, file) {
-          paths.push(file.path);
-        });
+          $(self.selectedFiles()).each(function (index, file) {
+            paths.push(file.path);
+          });
 
-        hiddenFields($("#chownForm"), 'path', paths);
+          hiddenFields($("#chownForm"), 'path', paths);
 
-        $("#chownForm").attr("action", "/filebrowser/chown?next=${url('filebrowser.views.view', path=urlencode('/'))}" + "." + self.currentPath());
+          $("#chownForm").attr("action", "/filebrowser/chown?next=${url('filebrowser.views.view', path=urlencode('/'))}" + "." + self.currentPath());
 
-        $("select[name=user]").val(self.selectedFile().stats.user);
+          $("select[name=user]").val(self.selectedFile().stats.user);
 
-        if ($("select[name=group] option:contains('" + self.selectedFile().stats.group + "')").length > 0) {
-          $("select[name=group]").val(self.selectedFile().stats.group);
-        } else {
-          $("select[name=group]").val("__other__");
-          $("input[name=group_other]").val(self.selectedFile().stats.group);
-        }
+          if ($("select[name=group] option:contains('" + self.selectedFile().stats.group + "')").length > 0) {
+            $("select[name=group]").val(self.selectedFile().stats.group);
+          } else {
+            $("select[name=group]").val("__other__");
+            $("input[name=group_other]").val(self.selectedFile().stats.group);
+          }
 
-        $("select[name=group]").change();
+          $("select[name=group]").change();
 
-        $("#changeOwnerModal").modal({
-          keyboard:true,
-          show:true
-        });
+          $("#changeOwnerModal").modal({
+            keyboard: true,
+            show: true
+          });
+        }
       };
 
       self.changePermissions = function (data, event) {
-        var paths = [];
-        var allFileType = true;
+        if (!self.isCurrentDirSentryManaged()) {
+          var paths = [];
+          var allFileType = true;
 
-        event.preventDefault();
-        event.stopPropagation();
+          event.preventDefault();
+          event.stopPropagation();
 
-        $(self.selectedFiles()).each(function (index, file) {
-          if ("dir" == file.type){
-            allFileType = false;
-          }
-          paths.push(file.path);
-        });
+          $(self.selectedFiles()).each(function (index, file) {
+            if ("dir" == file.type) {
+              allFileType = false;
+            }
+            paths.push(file.path);
+          });
 
-        hiddenFields($("#chmodForm"), 'path', paths);
+          hiddenFields($("#chmodForm"), 'path', paths);
 
-        $("#chmodForm").attr("action", "/filebrowser/chmod?next=${url('filebrowser.views.view', path=urlencode('/'))}" + "." + self.currentPath());
+          $("#chmodForm").attr("action", "/filebrowser/chmod?next=${url('filebrowser.views.view', path=urlencode('/'))}" + "." + self.currentPath());
 
-        $("#changePermissionModal").modal({
-          keyboard:true,
-          show:true
-        });
+          $("#changePermissionModal").modal({
+            keyboard: true,
+            show: true
+          });
 
-        // Initial values for form
-        var permissions = ["sticky", "user_read", "user_write", "user_execute", "group_read", "group_write", "group_execute", "other_read", "other_write", "other_execute"].reverse();
-        var mode = octal(self.selectedFile().mode) & 01777;
+          // Initial values for form
+          var permissions = ["sticky", "user_read", "user_write", "user_execute", "group_read", "group_write", "group_execute", "other_read", "other_write", "other_execute"].reverse();
+          var mode = octal(self.selectedFile().mode) & 01777;
 
-        for (var i = 0; i < permissions.length; i++) {
-          if (mode & 1) {
-            $("#chmodForm input[name=" + permissions[i] + "]").attr("checked", true);
-          } else {
-            $("#chmodForm input[name=" + permissions[i] + "]").attr("checked", false);
+          for (var i = 0; i < permissions.length; i++) {
+            if (mode & 1) {
+              $("#chmodForm input[name=" + permissions[i] + "]").attr("checked", true);
+            } else {
+              $("#chmodForm input[name=" + permissions[i] + "]").attr("checked", false);
+            }
+            mode >>>= 1;
           }
-          mode >>>= 1;
-        }
 
-        if (allFileType){
-          $("#chmodForm input[name='user_execute']").attr("disabled", "disabled");
-          $("#chmodForm input[name='group_execute']").attr("disabled", "disabled");
-          $("#chmodForm input[name='other_execute']").attr("disabled", "disabled");
-        } else {
-          $("#chmodForm input[name='user_execute']").removeAttr("disabled");
-          $("#chmodForm input[name='group_execute']").removeAttr("disabled");
-          $("#chmodForm input[name='other_execute']").removeAttr("disabled");
+          if (allFileType) {
+            $("#chmodForm input[name='user_execute']").attr("disabled", "disabled");
+            $("#chmodForm input[name='group_execute']").attr("disabled", "disabled");
+            $("#chmodForm input[name='other_execute']").attr("disabled", "disabled");
+          } else {
+            $("#chmodForm input[name='user_execute']").removeAttr("disabled");
+            $("#chmodForm input[name='group_execute']").removeAttr("disabled");
+            $("#chmodForm input[name='other_execute']").removeAttr("disabled");
+          }
         }
       };