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

[security] Pagination skeleton for fetching more files

Prepared a do as user preview
Romain Rigaux 11 жил өмнө
parent
commit
27671ac

+ 7 - 4
apps/filebrowser/src/filebrowser/views.py

@@ -300,9 +300,6 @@ def listdir(request, path, chooser):
         'file_filter': file_filter,
         'breadcrumbs': breadcrumbs,
         'current_dir_path': path,
-        # These could also be put in automatically via
-        # http://docs.djangoproject.com/en/dev/ref/templates/api/#django-core-context-processors-request,
-        # but manually seems cleaner, since we only need it here.
         'current_request_path': request.path,
         'home_directory': request.fs.isdir(home_dir_path) and home_dir_path or None,
         'cwd_set': True,
@@ -361,11 +358,17 @@ def listdir_paged(request, path):
 
     pagenum = int(request.GET.get('pagenum', 1))
     pagesize = int(request.GET.get('pagesize', 30))
+    do_as = None
+    if request.user.is_superuser:
+      do_as = request.GET.get('doas', request.user.username)
 
     home_dir_path = request.user.get_home_directory()
     breadcrumbs = parse_breadcrumbs(path)
 
-    all_stats = request.fs.listdir_stats(path)
+    if do_as:
+      all_stats = request.fs.do_as_user(do_as, request.fs.listdir_stats, path)
+    else:
+      all_stats = request.fs.listdir_stats(path)
 
 
     # Filter first

+ 13 - 13
apps/security/src/security/templates/hdfs.mako

@@ -56,7 +56,6 @@ ${ layout.menubar(section='hdfs') }
 
 <script type="text/html" id="acl-edition">
   <div data-bind="visible: status() != 'deleted'">
-    <span data-bind="visible: isDefault">Default</span>
     <input type="radio" value="group" data-bind="checked: type, attr: { name: 'aclType' + $index() + (isDefault() ? 'isDefault' : 'notDefault') }"/> ${ _('group') }
     <input type="radio" value="user" data-bind="checked: type, attr: { name: 'aclType' + $index() + (isDefault() ? 'isDefault' : 'notDefault') }"/> ${ _('user') }
     <input type="radio" value="mask" data-bind="checked: type, attr: { name: 'aclType' + $index() + (isDefault() ? 'isDefault' : 'notDefault') }"/> ${ _('mask') }
@@ -92,7 +91,7 @@ ${ layout.menubar(section='hdfs') }
             </br>
             <input type="checkbox" checked="checked"> ${_('Me')}
             </br>          
-            <select data-bind="options: availableHadoopUsers" size="10" multiple="true"></select>
+            <select data-bind="options: availableHadoopUsers, value: doAs" size="10"></select>
           </li>    
         </ul>
       </div>
@@ -113,7 +112,7 @@ ${ layout.menubar(section='hdfs') }
                 <i class="fa fa-external-link"></i>
               </a><br/>
               ${_('Owned by')} &nbsp;&nbsp;<i class="fa fa-user" style="color: #999999"></i> <strong><span data-bind="text: $root.assist.owner"></span></strong>
-               &nbsp;&nbsp;<i class="fa fa-users" style="color: #999999"></i> <strong><span data-bind="text: $root.assist.group"></span></strong><br/>
+              &nbsp;&nbsp;<i class="fa fa-users" style="color: #999999"></i> <strong><span data-bind="text: $root.assist.group"></span></strong><br/>
               <br/>
               <a href="javascript: void(0)">
                 <i class="fa fa-header"></i> View in text
@@ -124,7 +123,7 @@ ${ layout.menubar(section='hdfs') }
               </div>
               <a href="javascript: void(0)" data-bind="click: $root.assist.addAcl">
                 <i class="fa fa-plus"></i>
-              </a>  
+              </a>
               </br>
               Default (<i class="fa fa-times"></i> bulk delete?)
               <div data-bind="foreach: $root.assist.defaultAcls">
@@ -132,7 +131,7 @@ ${ layout.menubar(section='hdfs') }
               </div>
               <a href="javascript: void(0)" data-bind="click: $root.assist.addDefaultAcl">
                 <i class="fa fa-plus"></i>
-              </a>              
+              </a>
               <div data-bind="visible: $root.assist.changedAcls().length">
                 <button type="button" data-bind="click: $root.assist.updateAcls" rel="tooltip" data-placement="bottom" data-loading-text="${ _('Saving...') }" data-original-title="${ _('Save') }" class="btn">
                   <i class="fa fa-save"></i>
@@ -146,10 +145,6 @@ ${ layout.menubar(section='hdfs') }
       <div id="listDataset" class="section card card-small hide">
         <div class="alert alert-info"><h3>${ _('Existing datasets') }</h3></div>
       </div>
-
-      <div id="listHistory" class="section  card card-small hide">
-        <div class="alert alert-info"><h3>${ _('History') }</h3></div>
-      </div>
     </div>
 
   </div>
@@ -165,7 +160,7 @@ ${ layout.menubar(section='hdfs') }
             css: { 'pointer-icon': nodes().length > 0 },
             click: toggleVisibility"></span>
         <div data-bind="template: { name: 'folder-template', data: $data }, visible: isExpanded"></div>
-    </li>
+    </li>    
 </ul>
 <!-- /ko -->
 </script>
@@ -176,6 +171,14 @@ ${ layout.menubar(section='hdfs') }
         <li>
             <div data-bind="template: { name: 'node-template', data: $data }"></div>
         </li>
+    ## Should fetch more files here if needed
+    <!-- ko if: $index() == 14 -->
+      <li>
+        <a href="javascript: void(0)">         
+          <i class="fa fa-plus"> Next</i> 
+        </a>
+      </li>
+    <!-- /ko -->        
     </ul>
 <!-- /ko -->
 </script>
@@ -189,11 +192,8 @@ ${ layout.menubar(section='hdfs') }
     <!-- /ko -->
 
     <!-- ko if: nodes().length !== 0 -->
-
         <div data-bind="template: { name: 'folder-template', data: $data }, visible: isExpanded"></div>
-
     <!-- /ko -->
-
 </script>
 
 <script type="text/html" id="node-name-template">

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

@@ -51,10 +51,6 @@ def is_selected(section, matcher):
         <div class="container-fluid">
           <div class="nav-collapse">
 			<div class="pull-right" style="padding-right:50px; padding-top:10px">
-			  % if user.is_superuser:
-			    <button type="button" title="${ _('Edit') }" rel="tooltip" data-placement="bottom"><i class="fa fa-pencil"></i></button>
-			    <button type="button" title="${ _('Save') }" rel="tooltip" data-placement="bottom" data-loading-text="${ _("Saving...") }"><i class="fa fa-save"></i></button>
-			  % endif
 			</div>
             <ul class="nav">
               <li class="currentApp">

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

@@ -85,7 +85,7 @@ var Assist = function (vm, assist) {
   });
   self.changedAcls = ko.computed(function () {
     return $.grep(self.acls(), function (acl) {
-      return ['new', 'deleted', 'modified'].indexOf(acl.status()) != -1
+      return ['new', 'deleted', 'modified'].indexOf(acl.status()) != -1;
     });
   });
 
@@ -115,10 +115,10 @@ var Assist = function (vm, assist) {
   self.convertItemToObject = function (item) {
     var _path = item.path;
     var _parent =  _path.substr(0, _path.lastIndexOf("/"));
-    if (_parent == ""){
+    if (_parent == "") {
       _parent = "/";
     }
-    if (_path != "/"){
+    if (_path != "/") {
       self.growingTree(self.traversePath(self.growingTree(), _parent, item));
     }
   }
@@ -164,16 +164,20 @@ var Assist = function (vm, assist) {
   }
 
   self.fetchPath = function () {
-    $.getJSON('/filebrowser/view' + self.path() + "?pagesize=15&format=json", function (data) {
+    $.getJSON('/filebrowser/view' + self.path(), {
+    	'pagesize': 15,
+    	'format': 'json',
+    	'doas': vm.doAs(),
+    }, function (data) {
       self.loadParents(data.breadcrumbs);
       if (data['files'] && data['files'][0]['type'] == 'dir') { // Hack for now
         self.files.removeAll();
         $.each(data.files, function (index, item) {
           self.convertItemToObject(item);
           self.files.push(ko.mapping.fromJS({
-                'path': item.path,
-                'aclBit': item.rwx.indexOf('+') != -1
-              })
+              'path': item.path,
+              'aclBit': item.rwx.indexOf('+') != -1
+            })
           );
         });
         self.loadData(self.growingTree());
@@ -229,8 +233,8 @@ var Assist = function (vm, assist) {
           $(document).trigger("info", 'Done!');
         }
     ).fail(function (xhr, textStatus, errorThrown) {
-          $(document).trigger("error", JSON.parse(xhr.responseText).message);
-        });
+        $(document).trigger("error", JSON.parse(xhr.responseText).message);
+    });
   }
 }
 
@@ -260,19 +264,18 @@ NodeModel.prototype.mapOptions = {
 	}
 };
 
-// Might rename Assist to Acls and create Assist for the tree widget?
 
 var HdfsViewModel = function (initial) {
   var self = this;
 
   self.assist = new Assist(self, initial);
-  //self.assist.path('/user/hue/nano');
-  self.assist.path('/user/hue/oozie-oozi/0000001-140325184036225-oozie-oozi-W/pig--pig');
+  
 
+  self.doAs = ko.observable('');
   self.availableHadoopUsers = ko.observableArray();
   self.availableHadoopGroups = ko.observableArray();
 
-  self.init = function () {
+  self.init = function () {	
     self.fetchUsers();
   }
 
@@ -286,6 +289,9 @@ var HdfsViewModel = function (initial) {
       $.each(data.groups, function (i, group) {
         self.availableHadoopGroups.push(group.name);
       });
+      
+      self.assist.path('/');
+      self.doAs('admin');      
     });
   }
 };