Explorar o código

[security] Highlight files with acl in the listing

Romain Rigaux %!s(int64=11) %!d(string=hai) anos
pai
achega
1ec14c0

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

@@ -28,7 +28,6 @@ def _get_acl(acl):
   return _get_acl_name(acl) + ('r' if acl['r']  else '-') + ('w' if acl['w'] else '-') + ('x' if acl['x'] else '-')
 
 
-
 def get_acls(request):
   path = request.GET.get('path')
   acls = request.fs.get_acl_status(path)

+ 16 - 1
apps/security/src/security/templates/hdfs.mako

@@ -34,6 +34,18 @@ ${ layout.menubar(section='hdfs') }
           <li class="nav-header">${ _('ACLs') }</li>
           <li class="active"><a href="#edits"><i class="fa fa-pencil"></i> ${ _('Edit') }</a></li>
           <li><a href="#view"><i class="fa fa-eye"></i> ${ _('View') }</a></li>
+          <li class="nav-header"><i class="fa fa-group"></i> ${ _('Groups') }
+            </br>
+            <input type="checkbox" checked></input> Me
+            </br>
+            <select size="10" multiple="true"></select>
+          </li>
+          <li class="nav-header"><i class="fa fa-group"></i> ${ _('Users') }
+            </br>
+            <input type="checkbox" checked></input> Me
+            </br>          
+            <select size="10" multiple="true"></select>
+          </li>    
         </ul>
       </div>
     </div>
@@ -50,12 +62,15 @@ ${ layout.menubar(section='hdfs') }
           <div>
             <div class="span8">
               <div data-bind="foreach: $root.assist.files">
-                <div data-bind="text: $data"></div>
+                <div data-bind="text: path, style: { color: aclBit() ? 'blue' : '' }"></div>
               </div>
             </div>
             <div class="span4">
               <span data-bind="text: $root.assist.owner"></span>
               <span data-bind="text: $root.assist.group"></span>
+              <a href="javascript: void(0)">
+                <i class="fa fa-header"></i> View in text
+              </a>
               <div data-bind="foreach: $root.assist.acls">
                 <div data-bind="visible: status() != 'deleted'">
                   <input type="radio" value="group" data-bind="checked: type, attr: { name: 'aclType' + $index()} "/> ${ _('Group') }

+ 6 - 8
apps/security/src/security/views.py

@@ -20,23 +20,21 @@ import json
 from beeswax.api import autocomplete
 from desktop.lib.django_util import render
 
-from libsentry.api import get_api
 
-
-def get_hadoop_groups(): # Mock for now, maybe pull from LDAP
+def _get_hadoop_groups(): # Mock for now, maybe pull from LDAP
   return ['romain', 'sambashare', 'cdrom', 'lpadmin', 'admin', 'adm', 'lp', 'dialout', 'plugdev']
 
 
 def hive(request):
   assist = autocomplete(request, database=None, table=None)
 
-#    url(r'^api/autocomplete/$', 'autocomplete', name='api_autocomplete_databases'),
-#  url(r'^api/autocomplete/(?P<database>\w+)/$', 'autocomplete', name='api_autocomplete_tables'),
-#  url(r'^api/autocomplete/(?P<database>\w+)/(?P<table>\w+)$', 'autocomplete', name='api_autocomplete_columns'),
+  #  url(r'^api/autocomplete/$', 'autocomplete', name='api_autocomplete_databases'),
+  #  url(r'^api/autocomplete/(?P<database>\w+)/$', 'autocomplete', name='api_autocomplete_tables'),
+  #  url(r'^api/autocomplete/(?P<database>\w+)/(?P<table>\w+)$', 'autocomplete', name='api_autocomplete_columns'),
 
   return render("hive.mako", request, {
       'assist': assist,
-      'initial': json.dumps({'hadoop_groups': get_hadoop_groups()}),
+      'initial': json.dumps({'hadoop_groups': _get_hadoop_groups()}),
   })
 
 
@@ -44,5 +42,5 @@ def hdfs(request):
 
   return render("hdfs.mako", request, {
       'assist': {},
-      'hadoop_groups': get_hadoop_groups(),
+      'hadoop_groups': _get_hadoop_groups(),
   })

+ 6 - 2
apps/security/static/js/hdfs.ko.js

@@ -80,11 +80,15 @@ var Assist = function (vm, assist) {
   };
 
   self.fetchPath = function () {
-    $.getJSON('/filebrowser/view' + self.path() + "?pagesize=15&format=json", function (data) { // Might need to create a cleaner API by calling directly webhdfs#LISTDIR
+    $.getJSON('/filebrowser/view' + self.path() + "?pagesize=15&format=json", function (data) {
       if (data['files'] && data['files'][0]['type'] == 'dir') { // Hack for now
         self.files.removeAll();
         $.each(data.files, function(index, item) {
-    	  self.files.push(item.path);
+    	  self.files.push(ko.mapping.fromJS({
+    		  'path': item.path,
+    		  'aclBit': item.rwx.indexOf('+') != -1
+    	    })
+    	  );
         });
       }
       self.getAcls();