Explorar el Código

[security] Fix duplicates on the role list after an add operation

Enrico Berti hace 11 años
padre
commit
8efc2cc

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

@@ -287,7 +287,7 @@ ${ layout.menubar(section='hive') }
                   <div class="acl-block acl-actions" data-bind="click: privilegesChanged().length == 0 ? addPrivilege : void(0)">
                     <span class="pointer" data-bind="click: addPrivilege, visible: $data.showPrivileges" 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.role.savePrivileges, visible: privilegesChanged().length > 0" title="${ _('Save') }"> &nbsp; <i class="fa fa-save"></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>
                 </td>
               </tr>              

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

@@ -225,7 +225,7 @@ var Role = function (vm, role) {
         self.reset();
         $(document).trigger("created.role");
         var role = new Role(vm, data.role);
-        vm.roles.unshift(role);
+        vm.originalRoles.unshift(role);
         vm.assist.refreshTree();
         vm.list_sentry_privileges_by_role(role); // Show privileges
       } else {
@@ -262,7 +262,7 @@ var Role = function (vm, role) {
       roleName: role.name
     }, function (data) {
       if (data.status == 0) {
-        vm.removeRole(role.name);
+        vm.removeRole(role.name());
         vm.assist.refreshTree();
       } else {
         $(document).trigger("error", data.message);
@@ -834,11 +834,17 @@ var HiveViewModel = function (initial) {
 
   self.removeRole = function (roleName) {
     $.each(self.roles(), function (index, role) {
-      if (role.name == roleName) {
+      if (role.name() == roleName) {
         self.roles.remove(role);
         return false;
       }
     });
+    $.each(self.originalRoles(), function (index, role) {
+      if (role.name() == roleName) {
+        self.originalRoles.remove(role);
+        return false;
+      }
+    });
   };
 
   self.list_sentry_roles_by_group = function () {