فهرست منبع

[security] Update an existing privilege

We need to drop the original one and create the new one.
Romain Rigaux 11 سال پیش
والد
کامیت
dec77d1
3فایلهای تغییر یافته به همراه14 افزوده شده و 8 حذف شده
  1. 7 4
      apps/security/src/security/api/hive.py
  2. 7 3
      apps/security/static/js/hive.ko.js
  3. 0 1
      desktop/libs/libsentry/src/libsentry/client.py

+ 7 - 4
apps/security/src/security/api/hive.py

@@ -151,10 +151,13 @@ def save_privileges(request):
     deleted_privileges = [privilege for privilege in role['privilegesChanged'] if privilege['status'] == 'deleted']
     for privilege in deleted_privileges:
       _drop_sentry_privilege(request.user, role, privilege)
-    
-    # Todo 
-#    modified_privileges = [privilege for privilege in role['privilegesChanged'] if privilege['status'] == 'modified']
-#    get_api(request.user).rename_sentry_privilege(oldAuthorizable, newAuthorizable)
+
+    modified_privileges = [privilege for privilege in role['privilegesChanged'] if privilege['status'] == 'modified']
+    old_privileges_ids = [privilege['id'] for privilege in modified_privileges]
+    _hive_add_privileges(request.user, role, modified_privileges)
+    for privilege in role['originalPrivileges']:
+      if privilege['id'] in old_privileges_ids:      
+        _drop_sentry_privilege(request.user, role, privilege)
 
     result['message'] = ''
     result['status'] = 0

+ 7 - 3
apps/security/static/js/hive.ko.js

@@ -29,6 +29,7 @@ function UUID() {
 var Privilege = function (vm, privilege) {
   var self = this;
 
+  self.id = ko.observable(typeof privilege.id != "undefined" && privilege.id != null ? privilege.id : "");
   self.roleName = ko.observable(typeof privilege.roleName != "undefined" && privilege.roleName != null ? privilege.roleName : "");
   self.status = ko.observable(typeof privilege.status != "undefined" && privilege.status != null ? privilege.status : "");
   self.editing = ko.observable(typeof privilege.editing != "undefined" && privilege.editing != null ? privilege.editing : false);
@@ -286,7 +287,7 @@ var Assist = function (vm) {
           _mainFound = true;
         }
       });
-      if (!_mainFound) {
+      if (! _mainFound) {
         var _item = {
           path: db,
           name: db,
@@ -610,7 +611,7 @@ var HiveViewModel = function (initial) {
   self.roleFilter = ko.observable("");
   self.filteredRoles = ko.computed(function () {
     var _filter = self.roleFilter().toLowerCase();
-    if (!_filter) {
+    if (! _filter) {
       return self.roles();
     } else {
       return ko.utils.arrayFilter(self.roles(), function (role) {
@@ -755,8 +756,10 @@ var HiveViewModel = function (initial) {
           role.originalPrivileges.removeAll();
           $.each(data.sentry_privileges, function (index, item) {
             var privilege = _create_ko_privilege(item);
+            var privilegeCopy = _create_ko_privilege(item);
+            privilegeCopy.id(privilege.id());
             role.privileges.push(privilege);
-            role.originalPrivileges.push(privilege);
+            role.originalPrivileges.push(privilegeCopy);
           });
           role.showPrivileges(true);
         }
@@ -776,6 +779,7 @@ var HiveViewModel = function (initial) {
       'action': privilege.action,
       'timestamp': privilege.timestamp,
       'roleName': privilege.roleName,
+      'id': UUID()
     });
     return _privilege;
   }

+ 0 - 1
desktop/libs/libsentry/src/libsentry/client.py

@@ -83,7 +83,6 @@ class SentryClient(object):
   def alter_sentry_role_revoke_privilege(self, roleName, tSentryPrivilege):
     privilege = TSentryPrivilege(**tSentryPrivilege)
     request = TAlterSentryRoleRevokePrivilegeRequest(requestorUserName=self.username, roleName=roleName, privilege=privilege)
-    print request
     return self.client.alter_sentry_role_revoke_privilege(request)