소스 검색

AMBARI-16102: Inconsistency between grid and list view of roles page (rzang)

Richard Zang 9 년 전
부모
커밋
b9bbb6a5f3

+ 2 - 1
ambari-admin/src/main/resources/ui/admin-web/app/scripts/i18n.config.js

@@ -291,7 +291,8 @@ angular.module('ambariAdminConsole')
         'serviceOperator': 'Service Operator',
         'ambariAdmin': 'Administrator',
         'viewUser': 'View User',
-        'none': 'None'
+        'none': 'None',
+        'oneRolePerUser': 'Only 1 role allowed per user'
       },
 
       'alerts': {

+ 25 - 2
ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/PermissionsSaver.js

@@ -18,7 +18,8 @@
 'use strict';
 
 angular.module('ambariAdminConsole')
-.factory('PermissionSaver', ['Cluster', 'View', '$q', 'getDifference', function(Cluster, View, $q, getDifference) {
+.factory('PermissionSaver', ['Cluster', 'View', '$q', 'getDifference', '$translate', function(Cluster, View, $q, getDifference, $translate) {
+  var $t = $translate.instant;
 
   function savePermissionsFor(resource, permissions, params){
     var arr = [];
@@ -48,7 +49,16 @@ angular.module('ambariAdminConsole')
         }
       }));
     });
-
+    if (!passOneRoleCheck(arr)) {
+      console.log("CHECK FAILED");
+      var deferred = $q.defer();
+      deferred.reject({
+        data: {
+          message: $t('users.roles.oneRolePerUser')
+        }
+      });
+      return deferred.promise;
+    }
     return resource.updatePrivileges(params, arr);
   }
   
@@ -129,6 +139,19 @@ angular.module('ambariAdminConsole')
     return deferred.promise;
   }
 
+  function passOneRoleCheck(arr) {
+    var hash = {};
+    for(var i = 0; i < arr.length; i++) {
+      var obj = arr[i];
+      if (hash[obj.PrivilegeInfo.principal_name]) {
+        return false;
+      } else {
+        hash[obj.PrivilegeInfo.principal_name] = true;
+      }
+    }
+    return true;
+  }
+
   return {
     saveClusterPermissions: function(oldPermissions, newPermissions, params) {
       return savePermissionsFor(Cluster, oldPermissions, newPermissions, params);