소스 검색

[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)