Browse Source

[security] Preset correct privilege path on Sentry table page

Romain Rigaux 11 years ago
parent
commit
91cc14b

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

@@ -27,11 +27,11 @@ ${ 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-cube"></i> <span data-bind="text: name"></span></div>
+  <div class="acl-block-title"><i class="fa fa-cube"></i> <a href="javascript: void(0)"><span data-bind="text: name"></span></a></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>
-    <span class="pointer" data-bind="click: $root.list_sentry_privileges_by_role, visible: privilegesChanged().length > 0" title="${ _('Undo') }"> &nbsp; <i class="fa fa-undo"></i></span>
+    <span class="pointer" data-bind="click: $root.list_sentry_privileges_by_authorizable, visible: privilegesChanged().length > 0" title="${ _('Undo') }"> &nbsp; <i class="fa fa-undo"></i></span>
     <span class="pointer" data-bind="click: $root.role.savePrivileges, visible: privilegesChanged().length > 0" title="${ _('Save') }"> &nbsp; <i class="fa fa-save"></i></span>
   </div>
 </script>
@@ -42,7 +42,7 @@ ${ layout.menubar(section='hive') }
 
   <!-- ko if: editing() -->
     <div class="pull-right">
-      <a href="javascript: void(0)" style="margin-right: 4px"><i class="fa fa-header" data-bind="click: function() { if (editing()) { editing(false); }}"></i></a>
+      <a href="javascript: void(0)" style="margin-right: 4px"><i class="fa fa-eye" data-bind="click: function() { if (editing()) { editing(false); }}"></i></a>
       <a href="javascript: void(0)" style="margin-right: 4px"><i class="fa fa-times" data-bind="click: remove"></i></a>
     </div>
     <input name="db" data-bind="attr: { name: 'privilege-' + $index() }" type="radio" checked/>
@@ -68,14 +68,12 @@ ${ layout.menubar(section='hive') }
       <a href="javascript: void(0)" style="margin-right: 4px"><i class="fa fa-times" data-bind="click: remove"></i></a>
     </div>
 
-    <em class="muted" data-bind="text: moment(timestamp()).fromNow()"></em><br/>
-    ${_('Database')}: <a data-bind="attr: { href: '/metastore/table/' + dbName() }" target="_blank"><span data-bind="text: dbName"></span></a><br/>
-    ${_('Action')}: <span data-bind="text: action"></span>
-    <span data-bind="text: privilegeScope"></span>
-    <span data-bind="text: tableName"></span>
+    <em class="muted" data-bind="text: moment(timestamp()).fromNow()"></em> <span data-bind="text: privilegeScope"></span><br/>
+    <span data-bind="text: serverName"></span> ${_('Database')}: <a data-bind="attr: { href: '/metastore/table/' + dbName() }" target="_blank"><span data-bind="text: dbName"></span></a> <span data-bind="text: tableName"></span>
     <span data-bind="text: URI"></span>
-    <span data-bind="text: grantor"></span>
-    <span data-bind="text: serverName"></span>
+    <br/>
+    ${_('Action')}: <span data-bind="text: action"></span>
+    <span data-bind="text: grantor"></span>    
   <!-- /ko -->
 </div>
 </script>
@@ -153,7 +151,6 @@ ${ layout.menubar(section='hive') }
                     <a href="javascript: void(0)" data-bind="click: $root.bulk_delete_privileges" title="${ _('Remove privileges of checkbox selection') }">
                       <i class="fa fa-times"></i>
                     </a>
-                    <label><input type="checkbox" data-bind="checked: $root.assist.recursive"> ${ _('Recursive') }</label>
                   </div>
                   <i class="fa fa-spinner fa-spin" data-bind="visible: $root.assist.isLoadingTree()"></i>
                 </div>
@@ -222,7 +219,10 @@ ${ layout.menubar(section='hive') }
                     <i class="fa fa-2x fa-caret" data-bind="click: function() { if (showPrivileges()) { showPrivileges(false); } else { $root.list_sentry_privileges_by_role($data);} }, css: {'fa-caret-right' : ! showPrivileges(), 'fa-caret-down': showPrivileges() }"></i>
                   </a>
                 </td>
-                <td data-bind="text: name, click: function() { if (showPrivileges()) { showPrivileges(false); } else { $root.list_sentry_privileges_by_role($data);} }" class="pointer"></td>
+                <td>
+                  <i class="fa fa-cube"></i>
+                   <span data-bind="text: name, click: function() { if (showPrivileges()) { showPrivileges(false); } else { $root.list_sentry_privileges_by_role($data);} }" class="pointer"/>
+                </td>
                 <td>
                   <a href="javascript: void(0)" data-bind="click: function() { showEditGroups(true); }">
                     <span data-bind="foreach: groups, visible: ! showEditGroups() && ! groupsChanged()">

+ 6 - 10
apps/security/static/js/hive.ko.js

@@ -149,7 +149,11 @@ var Role = function (vm, role) {
   }
 
   self.addPrivilege = function () {
-    self.privileges.push(new Privilege(vm, {'serverName': vm.assist.server(), 'status': 'new', 'editing': true}));
+	if (vm.getSectionHash() == 'edit') {
+      self.privileges.push(new Privilege(vm, {'serverName': vm.assist.server(), 'status': 'new', 'editing': true, 'dbName': vm.assist.db(), 'tableName': vm.assist.table()}));
+	} else {
+      self.privileges.push(new Privilege(vm, {'serverName': vm.assist.server(), 'status': 'new', 'editing': true}));
+	}
   }
   
   self.resetGroups = function () {
@@ -220,6 +224,7 @@ var Role = function (vm, role) {
       role: ko.mapping.toJSON(role)
     }, function (data) {
       if (data.status == 0) {
+    	vm.list_sentry_privileges_by_authorizable();
         vm.list_sentry_privileges_by_role(role); // Refresh all role privileges
       } else {
         $(document).trigger("error", data.message);
@@ -635,7 +640,6 @@ var HiveViewModel = function (initial) {
 
   // Editing
   self.showCreateRole = ko.observable(false);
-  self.recursive = ko.observable(false);
   self.role = new Role(self, {});
   self.privilege = new Privilege(self, {});
 
@@ -768,12 +772,6 @@ var HiveViewModel = function (initial) {
     });
   };
 
-  function _create_ko_role(role) {
-    var _role = new Role(self, {
-
-    });
-  }
-
   function _create_ko_privilege(privilege) {
     var _privilege = new Privilege(self, {
       'privilegeScope': privilege.scope,
@@ -837,7 +835,6 @@ var HiveViewModel = function (initial) {
     $.post("/security/api/hive/bulk_delete_privileges", {
       'authorizableHierarchy': ko.mapping.toJSON(_create_authorizable_from_ko()),
       'checkedPaths': ko.mapping.toJSON(checkedPaths),
-      'recursive': ko.mapping.toJSON(self.recursive()),
     }, function (data) {
       if (data.status == 0) {
         self.list_sentry_privileges_by_authorizable(); // Refresh
@@ -856,7 +853,6 @@ var HiveViewModel = function (initial) {
       'privileges': ko.mapping.toJSON(self.assist.privileges),
       'authorizableHierarchy': ko.mapping.toJSON(_create_authorizable_from_ko()),
       'checkedPaths': ko.mapping.toJSON(checkedPaths),
-      'recursive': ko.mapping.toJSON(self.recursive()),
     }, function (data) {
       if (data.status == 0) {
         self.list_sentry_privileges_by_authorizable(); // Refresh

+ 1 - 1
desktop/libs/libsentry/src/libsentry/api.py

@@ -153,7 +153,7 @@ class SentryApi(object):
         'database': privilege.dbName,
         'table': privilege.tableName,
         'URI': privilege.URI,
-        'action': privilege.action,
+        'action': privilege.action.upper(),
         'timestamp': privilege.createTime,
         'grantor': privilege.grantorPrincipal
     }