Ver código fonte

[sentry] Add column privilege to the UI skeleton

Romain Rigaux 10 anos atrás
pai
commit
976aea2ae0

+ 3 - 0
apps/security/src/security/api/hive.py

@@ -101,6 +101,7 @@ def _to_sentry_privilege(privilege):
       'serverName': privilege['serverName'],
       'serverName': privilege['serverName'],
       'dbName': privilege['dbName'],
       'dbName': privilege['dbName'],
       'tableName': privilege['tableName'],
       'tableName': privilege['tableName'],
+      'columnName': privilege['columnName'],
       'URI': _massage_uri(privilege['URI']),
       'URI': _massage_uri(privilege['URI']),
       'action': privilege['action'],
       'action': privilege['action'],
       'createTime': privilege['timestamp'],
       'createTime': privilege['timestamp'],
@@ -123,6 +124,7 @@ def _hive_add_privileges(user, role, privileges):
             'action': privilege.get('action'),
             'action': privilege.get('action'),
             'scope': privilege.get('privilegeScope'),
             'scope': privilege.get('privilegeScope'),
             'table': privilege.get('tableName'),
             'table': privilege.get('tableName'),
+            'column': privilege.get('columnName'),
             'URI': privilege.get('URI'),
             'URI': privilege.get('URI'),
             'server': privilege.get('serverName'),
             'server': privilege.get('serverName'),
             'grantOption': privilege.get('grantOption') == 1
             'grantOption': privilege.get('grantOption') == 1
@@ -345,6 +347,7 @@ def bulk_add_privileges(request):
     privileges = [privilege for privilege in privileges if privilege['status'] == '']
     privileges = [privilege for privilege in privileges if privilege['status'] == '']
 
 
     for path in [path['path'] for path in checkedPaths]:
     for path in [path['path'] for path in checkedPaths]:
+      # TODO: check how it goes with column
       if '.' in path:
       if '.' in path:
         db, table = path.split('.')
         db, table = path.split('.')
       else:
       else:

+ 14 - 1
apps/security/src/security/static/security/js/hive.ko.js

@@ -51,6 +51,12 @@ var Privilege = function (vm, privilege) {
       self.status('modified');
       self.status('modified');
     }
     }
   });
   });
+  self.columnName = ko.observable(typeof privilege.columnName != "undefined" && privilege.columnName != null ? privilege.columnName : "");
+  self.columnName.subscribe(function () {
+    if (self.status() == '') {
+      self.status('modified');
+    }
+  });
   self.URI = ko.observable(typeof privilege.URI != "undefined" && privilege.URI != null ? privilege.URI : "");
   self.URI = ko.observable(typeof privilege.URI != "undefined" && privilege.URI != null ? privilege.URI : "");
   self.URI.subscribe(function () {
   self.URI.subscribe(function () {
     if (self.status() == '') {
     if (self.status() == '') {
@@ -101,6 +107,8 @@ var Privilege = function (vm, privilege) {
       return 'TABLE';
       return 'TABLE';
     } else if (self.dbName().length > 0) {
     } else if (self.dbName().length > 0) {
       return 'DATABASE';
       return 'DATABASE';
+    } else if (self.columnName().length > 0) {
+      return 'COLUMN';
     } else {
     } else {
       return 'SERVER';
       return 'SERVER';
     }
     }
@@ -204,7 +212,7 @@ var Role = function (vm, role) {
 
 
   self.addPrivilege = function () {
   self.addPrivilege = function () {
     if (vm.getSectionHash() == 'edit') {
     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()}));
+      self.privileges.push(new Privilege(vm, {'serverName': vm.assist.server(), 'status': 'new', 'editing': true, 'dbName': vm.assist.db(), 'tableName': vm.assist.table(), 'columnName': vm.assist.column()}));
     } else {
     } else {
       self.privileges.push(new Privilege(vm, {'serverName': vm.assist.server(), 'status': 'new', 'editing': true}));
       self.privileges.push(new Privilege(vm, {'serverName': vm.assist.server(), 'status': 'new', 'editing': true}));
     }
     }
@@ -335,6 +343,10 @@ var Assist = function (vm, initial) {
     var table = self.path().split(/[.]/)[1];
     var table = self.path().split(/[.]/)[1];
     return table ? table : null;
     return table ? table : null;
   });
   });
+  self.column = ko.computed(function () {
+    var column = self.path().split(/[.]/)[2];
+    return column ? column : null;
+  });  
   self.privileges = ko.observableArray();
   self.privileges = ko.observableArray();
   self.roles = ko.observableArray();
   self.roles = ko.observableArray();
   self.isDiffMode = ko.observable(false);
   self.isDiffMode = ko.observable(false);
@@ -991,6 +1003,7 @@ var HiveViewModel = function (initial) {
       'serverName': privilege.server,
       'serverName': privilege.server,
       'dbName': privilege.database,
       'dbName': privilege.database,
       'tableName': privilege.table,
       'tableName': privilege.table,
+      'columnName': privilege.column,
       'URI': privilege.URI,
       'URI': privilege.URI,
       'action': privilege.action,
       'action': privilege.action,
       'timestamp': privilege.timestamp,
       'timestamp': privilege.timestamp,

+ 3 - 0
apps/security/src/security/templates/hive.mako

@@ -106,6 +106,9 @@ ${ layout.menubar(section='hive') }
       <span data-bind="visible: tableName">
       <span data-bind="visible: tableName">
         <i class="fa fa-long-arrow-right"></i> table=<a data-bind="attr: { href: '/metastore/table/' + dbName() + '/' + tableName() }" target="_blank"><span data-bind="text: tableName"></span></a>
         <i class="fa fa-long-arrow-right"></i> table=<a data-bind="attr: { href: '/metastore/table/' + dbName() + '/' + tableName() }" target="_blank"><span data-bind="text: tableName"></span></a>
       </span>
       </span>
+      <span data-bind="visible: columnName">
+        <i class="fa fa-long-arrow-right"></i> column=<span data-bind="text: columnName"></span>
+      </span>
     <!-- /ko -->
     <!-- /ko -->
 
 
     <!-- ko if: privilegeType() == 'uri' -->
     <!-- ko if: privilegeType() == 'uri' -->

+ 3 - 7
desktop/libs/libsentry/src/libsentry/api.py

@@ -92,9 +92,7 @@ class SentryApi(object):
       raise SentryException(response)
       raise SentryException(response)
 
 
   @ha_error_handler
   @ha_error_handler
-  def alter_sentry_role_grant_privilege(self, roleName, tSentryPrivilege, tSentryPrivileges=None):
-    if tSentryPrivileges is None:
-      tSentryPrivileges = []
+  def alter_sentry_role_grant_privilege(self, roleName, tSentryPrivilege=None, tSentryPrivileges=None):
     response = self.client.alter_sentry_role_grant_privilege(roleName, tSentryPrivilege, tSentryPrivileges)
     response = self.client.alter_sentry_role_grant_privilege(roleName, tSentryPrivilege, tSentryPrivileges)
 
 
     if response.status.value == 0:
     if response.status.value == 0:
@@ -103,9 +101,7 @@ class SentryApi(object):
       raise SentryException(response)
       raise SentryException(response)
 
 
   @ha_error_handler
   @ha_error_handler
-  def alter_sentry_role_revoke_privilege(self, roleName, tSentryPrivilege, tSentryPrivileges=None):
-    if tSentryPrivileges is None:
-      tSentryPrivileges = []
+  def alter_sentry_role_revoke_privilege(self, roleName, tSentryPrivilege=None, tSentryPrivileges=None):
     response = self.client.alter_sentry_role_revoke_privilege(roleName, tSentryPrivilege, tSentryPrivileges)
     response = self.client.alter_sentry_role_revoke_privilege(roleName, tSentryPrivilege, tSentryPrivileges)
 
 
     if response.status.value == 0:
     if response.status.value == 0:
@@ -210,7 +206,7 @@ class SentryApi(object):
         'action': 'ALL' if privilege.action == '*' else privilege.action.upper(),
         'action': 'ALL' if privilege.action == '*' else privilege.action.upper(),
         'timestamp': privilege.createTime,
         'timestamp': privilege.createTime,
         'grantOption': privilege.grantOption == 1,
         'grantOption': privilege.grantOption == 1,
-        'columnName': privilege.columnName,
+        'column': privilege.columnName,
     }
     }
 
 
 
 

+ 14 - 6
desktop/libs/libsentry/src/libsentry/client.py

@@ -106,16 +106,24 @@ class SentryClient(object):
 
 
 
 
   def alter_sentry_role_grant_privilege(self, roleName, tSentryPrivilege, tSentryPrivileges):
   def alter_sentry_role_grant_privilege(self, roleName, tSentryPrivilege, tSentryPrivileges):
-    privilege = TSentryPrivilege(**tSentryPrivilege)
-    privileges = [TSentryPrivilege(**tSentryPrivilege) for tSentryPrivilege in tSentryPrivileges]
-    request = TAlterSentryRoleGrantPrivilegeRequest(requestorUserName=self.username, roleName=roleName, privilege=privilege, privileges=privileges)
+    if tSentryPrivilege is not None:
+      tSentryPrivilege = TSentryPrivilege(**tSentryPrivilege)
+
+    if tSentryPrivileges is not None:
+      tSentryPrivileges = [TSentryPrivilege(**tSentryPrivilege) for tSentryPrivilege in tSentryPrivileges]
+
+    request = TAlterSentryRoleGrantPrivilegeRequest(requestorUserName=self.username, roleName=roleName, privilege=tSentryPrivilege, privileges=tSentryPrivileges)
     return self.client.alter_sentry_role_grant_privilege(request)
     return self.client.alter_sentry_role_grant_privilege(request)
 
 
 
 
   def alter_sentry_role_revoke_privilege(self, roleName, tSentryPrivilege, tSentryPrivileges):
   def alter_sentry_role_revoke_privilege(self, roleName, tSentryPrivilege, tSentryPrivileges):
-    privilege = TSentryPrivilege(**tSentryPrivilege)
-    privileges = [TSentryPrivilege(**tSentryPrivilege) for tSentryPrivilege in tSentryPrivileges]
-    request = TAlterSentryRoleRevokePrivilegeRequest(requestorUserName=self.username, roleName=roleName, privilege=privilege, privileges=privileges)
+    if tSentryPrivilege is not None:
+      tSentryPrivilege = TSentryPrivilege(**tSentryPrivilege)
+
+    if tSentryPrivileges is not None:
+      tSentryPrivileges = [TSentryPrivilege(**tSentryPrivilege) for tSentryPrivilege in tSentryPrivileges]
+
+    request = TAlterSentryRoleRevokePrivilegeRequest(requestorUserName=self.username, roleName=roleName, privilege=tSentryPrivilege, privileges=tSentryPrivileges)
     return self.client.alter_sentry_role_revoke_privilege(request)
     return self.client.alter_sentry_role_revoke_privilege(request)