Browse Source

AMBARI-7771 Change the way UI requests privileges of logged user. (Ievgen Fialkovskyi via ababiichuk)

aBabiichuk 10 years ago
parent
commit
6b88832488

+ 1 - 0
ambari-web/app/assets/test/tests.js

@@ -98,6 +98,7 @@ var files = ['test/init_model_test',
   'test/controllers/wizard/step10_test',
   'test/controllers/wizard/stack_upgrade/step3_controller_test',
   'test/login_test',
+  'test/router_test',
   'test/mappers/server_data_mapper_test',
   'test/mappers/hosts_mapper_test',
   'test/mappers/service_mapper_test',

+ 3 - 2
ambari-web/app/mappers/users_mapper.js

@@ -34,8 +34,9 @@ App.usersMapper = App.QuickDataMapper.create({
       var result= [];
       if(!App.User.find().someProperty("userName", item.Users.user_name)) {
         item.permissions = [];
-        if (!!Em.get(item.privileges, 'items.length')) {
-          item.permissions = item.privileges.items.mapProperty('PrivilegeInfo.permission_name');
+        var privileges = item.privileges;
+        if (!!Em.get(privileges, 'length')) {
+          item.permissions = privileges.mapProperty('PrivilegeInfo.permission_name');
         }
         item.Users.admin = self.isAdmin(item.permissions);
         item.Users.operator = self.isOperator(item.permissions);

+ 6 - 33
ambari-web/app/router.js

@@ -168,30 +168,6 @@ App.Router = Em.Router.extend({
     return App.db.getUser();
   },
 
-  /**
-   * Get user privileges.
-   *
-   * @param {String} userName
-   * @returns {$.Deferred}
-   **/
-  getUserPrivileges: function(userName) {
-    return App.ajax.send({
-      name: 'router.user.privileges',
-      sender: this,
-      data: {
-        userName: userName
-      },
-      success: 'getUserPrivilegesSuccess',
-      error: 'getUserPrivilegesError'
-    });
-  },
-
-  getUserPrivilegesSuccess: function() {},
-
-  getUserPrivilegesError: function(req) {
-    console.log("Get user privileges error: " + req.statusCode);
-  },
-
   setUserLoggedIn: function(userName) {
     this.setAuthenticated(true);
     this.setLoginName(userName);
@@ -243,6 +219,9 @@ App.Router = Em.Router.extend({
 
   loginSuccessCallback: function(data, opt, params) {
     console.log('login success');
+    App.usersMapper.map({"items": [data]});
+    this.setUserLoggedIn(params.loginName);
+    App.router.get('mainViewsController').loadAmbariViews();
     App.ajax.send({
       name: 'router.login.clusters',
       sender: this,
@@ -276,14 +255,9 @@ App.Router = Em.Router.extend({
     //TODO: Replace hard coded value with query. Same in templates/application.hbs
     var loginController = this.get('loginController');
     var loginData = params.loginData;
+    var privileges = loginData.privileges;
     var router = this;
-
-    this.getUserPrivileges(params.loginName).done(function(privileges) {
-      loginData.privileges = privileges;
-      App.usersMapper.map({"items": [loginData]});
-      router.setUserLoggedIn(params.loginName);
-      App.router.get('mainViewsController').loadAmbariViews();
-      var permissionList = privileges.items.mapProperty('PrivilegeInfo.permission_name');
+    var permissionList = privileges.mapProperty('PrivilegeInfo.permission_name');
       var isAdmin = permissionList.contains('AMBARI.ADMIN');
       var transitionToApp = false;
       if (isAdmin) {
@@ -300,7 +274,7 @@ App.Router = Em.Router.extend({
           router.setClusterInstalled(clustersData);
           //TODO: Iterate over clusters
           var clusterName = clustersData.items[0].Clusters.cluster_name;
-          var clusterPermissions = privileges.items.filterProperty('PrivilegeInfo.cluster_name', clusterName).mapProperty('PrivilegeInfo.permission_name');
+          var clusterPermissions = privileges.filterProperty('PrivilegeInfo.cluster_name', clusterName).mapProperty('PrivilegeInfo.permission_name');
           if (clusterPermissions.contains('CLUSTER.OPERATE')) {
             App.set('isAdmin', true);
             App.set('isOperator', true);
@@ -324,7 +298,6 @@ App.Router = Em.Router.extend({
         router.transitionTo('main.views.index');
         loginController.postLogin(true,true);
       }
-    });
   },
 
   loginGetClustersErrorCallback: function (req) {

+ 1 - 1
ambari-web/app/utils/ajax/ajax.js

@@ -1394,7 +1394,7 @@ var urls = {
     }
   },
   'router.login': {
-    'real': '/users/{loginName}',
+    'real': '/users/{loginName}?fields=*,privileges/PrivilegeInfo/cluster_name,privileges/PrivilegeInfo/permission_name',
     'mock': '/data/users/user_{usr}.json',
     'format': function (data) {
       var statusCode = jQuery.extend({}, require('data/statusCodes'));

+ 50 - 0
ambari-web/test/router_test.js

@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+
+require('router');
+
+describe('App.Router', function () {
+  var router = App.Router.create();
+
+  describe('#loginSuccessCallback()', function() {
+    it('should log in user and load views', function () {
+      var mainViewsControllerMock = Em.Object.create({
+        loadAmbariViews: sinon.stub()
+      });
+      var userName = 'test';
+      sinon.stub(App.usersMapper, 'map');
+      sinon.stub(router, 'setUserLoggedIn');
+      sinon.stub(App.router, 'get').withArgs('mainViewsController').returns(mainViewsControllerMock);
+      sinon.stub(App.ajax, 'send');
+
+      router.loginSuccessCallback({},{},{loginName: userName});
+
+      expect(mainViewsControllerMock.loadAmbariViews.calledOnce).to.be.true;
+      expect(router.setUserLoggedIn.calledOnce).to.be.true;
+      expect(router.setUserLoggedIn.calledWith(userName)).to.be.true;
+
+      App.usersMapper.map.restore();
+      router.setUserLoggedIn.restore();
+      App.router.get.restore();
+      App.ajax.send.restore();
+    })
+  });
+
+});