Jelajahi Sumber

Revert "AMBARI-14222. Hide/Show features based on user role"

This reverts commit b5041a107947afe3fa95d649887d8ea24b5610e9.
Jaimin Jetly 9 tahun lalu
induk
melakukan
1efb3abed4
59 mengubah file dengan 514 tambahan dan 378 penghapusan
  1. 32 10
      ambari-web/app/app.js
  2. 0 16
      ambari-web/app/controllers/global/cluster_controller.js
  3. 1 1
      ambari-web/app/controllers/global/user_settings_controller.js
  4. 1 1
      ambari-web/app/controllers/main/service/info/configs.js
  5. 1 1
      ambari-web/app/controllers/wizard/step7_controller.js
  6. 1 1
      ambari-web/app/mixins/common/userPref.js
  7. 4 1
      ambari-web/app/models/cluster_states.js
  8. 4 4
      ambari-web/app/router.js
  9. 1 1
      ambari-web/app/routes/add_alert_definition_routes.js
  10. 1 1
      ambari-web/app/routes/add_service_routes.js
  11. 1 1
      ambari-web/app/routes/installer.js
  12. 3 3
      ambari-web/app/routes/main.js
  13. 6 6
      ambari-web/app/templates/application.hbs
  14. 6 6
      ambari-web/app/templates/common/configs/config_history_flow.hbs
  15. 4 4
      ambari-web/app/templates/common/configs/notifications_configs.hbs
  16. 2 2
      ambari-web/app/templates/common/configs/overriddenProperty.hbs
  17. 3 3
      ambari-web/app/templates/common/configs/service_config.hbs
  18. 2 2
      ambari-web/app/templates/common/configs/service_config_category.hbs
  19. 2 2
      ambari-web/app/templates/common/configs/service_config_wizard.hbs
  20. 2 2
      ambari-web/app/templates/common/configs/service_version_box.hbs
  21. 4 4
      ambari-web/app/templates/common/configs/widgets/controls.hbs
  22. 2 0
      ambari-web/app/templates/common/modal_popups/widget_browser_footer.hbs
  23. 4 0
      ambari-web/app/templates/common/modal_popups/widget_browser_popup.hbs
  24. 2 0
      ambari-web/app/templates/common/widget/gauge_widget.hbs
  25. 2 0
      ambari-web/app/templates/common/widget/graph_widget.hbs
  26. 2 0
      ambari-web/app/templates/common/widget/number_widget.hbs
  27. 2 0
      ambari-web/app/templates/common/widget/template_widget.hbs
  28. 6 6
      ambari-web/app/templates/main/admin/kerberos.hbs
  29. 2 2
      ambari-web/app/templates/main/admin/stack_upgrade/versions.hbs
  30. 17 7
      ambari-web/app/templates/main/alerts.hbs
  31. 18 8
      ambari-web/app/templates/main/alerts/definition_details.hbs
  32. 2 2
      ambari-web/app/templates/main/host.hbs
  33. 2 2
      ambari-web/app/templates/main/host/bulk_operation_menu.hbs
  34. 2 0
      ambari-web/app/templates/main/host/details.hbs
  35. 23 31
      ambari-web/app/templates/main/host/details/host_component.hbs
  36. 2 2
      ambari-web/app/templates/main/host/stack_versions.hbs
  37. 8 8
      ambari-web/app/templates/main/host/summary.hbs
  38. 40 44
      ambari-web/app/templates/main/service/all_services_actions.hbs
  39. 2 2
      ambari-web/app/templates/main/service/info/configs.hbs
  40. 2 2
      ambari-web/app/templates/main/service/info/summary.hbs
  41. 26 30
      ambari-web/app/templates/main/service/item.hbs
  42. 0 4
      ambari-web/app/utils/ajax/ajax.js
  43. 4 4
      ambari-web/app/utils/helper.js
  44. 1 1
      ambari-web/app/utils/host_progress_popup.js
  45. 1 1
      ambari-web/app/views/common/configs/controls_view.js
  46. 2 2
      ambari-web/app/views/common/table_view.js
  47. 2 2
      ambari-web/app/views/main/admin/stack_upgrade/services_view.js
  48. 2 2
      ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
  49. 3 8
      ambari-web/app/views/main/host/details.js
  50. 100 114
      ambari-web/app/views/main/host/hosts_table_menu_view.js
  51. 1 1
      ambari-web/app/views/main/menu.js
  52. 1 1
      ambari-web/app/views/main/service/info/summary.js
  53. 2 2
      ambari-web/app/views/main/service/item.js
  54. 116 1
      ambari-web/test/app_test.js
  55. 2 1
      ambari-web/test/controllers/experimental_test.js
  56. 1 2
      ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
  57. 15 0
      ambari-web/test/controllers/wizard/step7_test.js
  58. 4 4
      ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js
  59. 10 10
      ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js

+ 32 - 10
ambari-web/app/app.js

@@ -96,14 +96,22 @@ module.exports = Em.Application.create({
            App.router.get('mainAdminStackAndUpgradeController.isSuspended');
   }.property('upgradeIsRunning', 'upgradeAborted', 'router.wizardWatcherController.isNonWizardUser', 'router.mainAdminStackAndUpgradeController.isSuspended'),
 
-  isAuthorized: function(authRoles, options) {
-    var result = false;
-    authRoles = $.map(authRoles.split(","), $.trim);
-
+  /**
+   * compute user access rights by permission type
+   * types:
+   *  - ADMIN
+   *  - MANAGER
+   *  - OPERATOR
+   *  - ONLY_ADMIN
+   * prefix "upgrade_" mean that element will not be unconditionally blocked while stack upgrade running
+   * @param type {string}
+   * @return {boolean}
+   */
+  isAccessible: function (type) {
     if (!App.router.get('mainAdminStackAndUpgradeController.isSuspended') &&
         !App.get('supports.opsDuringRollingUpgrade') &&
-        !['INIT', 'COMPLETED'].contains(this.get('upgradeState')) ||
-        !App.auth){
+        !['INIT', 'COMPLETED'].contains(this.get('upgradeState')) &&
+        !type.contains('upgrade_')) {
       return false;
     }
 
@@ -111,11 +119,25 @@ module.exports = Em.Application.create({
       return false;
     }
 
-    authRoles.forEach(function(auth) {
-      result = result || App.auth.contains(auth);
-    });
+    if (type.contains('upgrade_')) {
+      //slice off "upgrade_" prefix to have actual permission type
+      type = type.slice(8);
+    }
 
-    return result;
+    switch (type) {
+      case 'ADMIN':
+        return this.get('isAdmin');
+      case 'NON_ADMIN':
+        return !this.get('isAdmin');
+      case 'MANAGER':
+        return this.get('isAdmin') || this.get('isOperator');
+      case 'OPERATOR':
+        return this.get('isOperator');
+      case 'ONLY_ADMIN':
+        return this.get('isAdmin') && !this.get('isOperator');
+      default:
+        return false;
+    }
   },
 
   isStackServicesLoaded: false,

+ 0 - 16
ambari-web/app/controllers/global/cluster_controller.js

@@ -172,7 +172,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
    */
   loadClusterData: function () {
     var self = this;
-    this.loadAuthorizations();
     this.getAllHostNames();
     this.loadAmbariProperties();
     if (!App.get('clusterName')) {
@@ -351,21 +350,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
     });
   },
 
-  loadAuthorizations: function() {
-    App.ajax.send({
-      name: 'router.user.authorizations',
-      sender: this,
-      data: {userName: App.db.getLoginName()},
-      success: 'loadAuthorizationsSuccessCallback'
-    });
-  },
-
-  loadAuthorizationsSuccessCallback: function(response) {
-    if (response.items) {
-      App.auth = response.items.mapProperty('AuthorizationInfo.authorization_id');
-    }
-  },
-
   loadAmbariPropertiesSuccess: function (data) {
     this.set('ambariProperties', data.RootServiceComponents.properties);
     // Absence of 'jdk.name' and 'jce.name' properties says that ambari configured with custom jdk.

+ 1 - 1
ambari-web/app/controllers/global/user_settings_controller.js

@@ -183,7 +183,7 @@ App.UserSettingsController = Em.Controller.extend(App.UserPref, {
   showSettingsPopup: function() {
     var self = this;
     // Settings only for admins
-    if (!App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+    if (!App.isAccessible('upgrade_ADMIN')) {
       return;
     }
 

+ 1 - 1
ambari-web/app/controllers/main/service/info/configs.js

@@ -118,7 +118,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
    */
   canEdit: function () {
     return (this.get('selectedVersion') == this.get('currentDefaultVersion') || !this.get('selectedConfigGroup.isDefault'))
-        && !this.get('isCompareMode') && App.isAuthorized('SERVICE.MODIFY_CONFIGS') && !this.get('isHostsConfigsPage');
+        && !this.get('isCompareMode') && App.isAccessible('MANAGER') && !this.get('isHostsConfigsPage');
   }.property('selectedVersion', 'isCompareMode', 'currentDefaultVersion', 'selectedConfigGroup.isDefault'),
 
   serviceConfigs: Em.computed.alias('App.config.preDefinedServiceConfigs'),

+ 1 - 1
ambari-web/app/controllers/wizard/step7_controller.js

@@ -517,7 +517,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
    * @method _updateIsEditableFlagForConfig
    */
   _updateIsEditableFlagForConfig: function (serviceConfigProperty, defaultGroupSelected) {
-    if (App.isAuthorized('AMBARI.ADD_DELETE_CLUSTERS')) {
+    if (App.isAccessible('ADMIN')) {
       if (defaultGroupSelected && !this.get('isHostsConfigsPage') && !Em.get(serviceConfigProperty, 'group')) {
         serviceConfigProperty.set('isEditable', serviceConfigProperty.get('isReconfigurable'));
       } else if (Em.get(serviceConfigProperty, 'group') && Em.get(serviceConfigProperty, 'group.name') == this.get('selectedConfigGroup.name')) {

+ 1 - 1
ambari-web/app/mixins/common/userPref.js

@@ -80,7 +80,7 @@ App.UserPref = Em.Mixin.create({
    * @param {Object} value
    */
   postUserPref: function (key, value) {
-    if (!App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+    if (!App.isAccessible('upgrade_ADMIN')) {
       return $.Deferred().reject().promise();
     }
     var keyValuePair = {};

+ 4 - 1
ambari-web/app/models/cluster_states.js

@@ -138,7 +138,7 @@ App.clusterStatus = Em.Object.create(App.UserPref, {
       if (response.localdb && !$.isEmptyObject(response.localdb)) {
         this.set('localdb', response.localdb);
         // restore HAWizard data if process was started
-        var isHAWizardStarted = App.isAuthorized('SERVICE.ENABLE_HA') && !App.isEmptyObject(response.localdb.HighAvailabilityWizard);
+        var isHAWizardStarted = App.isAccessible('ADMIN') && !App.isEmptyObject(response.localdb.HighAvailabilityWizard);
         if (params.data.overrideLocaldb || isHAWizardStarted) {
           var localdbTables = (App.db.data.app && App.db.data.app.tables) ? App.db.data.app.tables : {};
           var authenticated = Em.get(App, 'db.data.app.authenticated') || false;
@@ -195,6 +195,9 @@ App.clusterStatus = Em.Object.create(App.UserPref, {
    */
   setClusterStatus: function (newValue, opt) {
     if (App.get('testMode')) return false;
+    if (!App.isAccessible('ADMIN')) {
+      Em.assert('Non-Admin user should not execute setClusterStatus function', true);
+    }
     var user = App.db.getUser();
     var login = App.db.getLoginName();
     var val = {clusterName: this.get('clusterName')};

+ 4 - 4
ambari-web/app/router.js

@@ -701,7 +701,7 @@ App.Router = Em.Router.extend({
     adminView: Em.Route.extend({
       route: '/adminView',
       enter: function (router) {
-        if (!router.get('loggedIn') || !App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+        if (!router.get('loggedIn') || !App.isAccessible('upgrade_ADMIN') || App.isAccessible('upgrade_OPERATOR')) {
           Em.run.next(function () {
             router.transitionTo('login');
           });
@@ -718,7 +718,7 @@ App.Router = Em.Router.extend({
     experimental: Em.Route.extend({
       route: '/experimental',
       enter: function (router, context) {
-        if (App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+        if (App.isAccessible('upgrade_OPERATOR')) {
           Em.run.next(function () {
             if (router.get('clusterInstallCompleted')) {
               router.transitionTo("main.dashboard.widgets");
@@ -726,14 +726,14 @@ App.Router = Em.Router.extend({
               router.route("installer");
             }
           });
-        } else if (!App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+        } else if (!App.isAccessible('upgrade_ADMIN')) {
           Em.run.next(function () {
             router.transitionTo("main.views.index");
           });
         }
       },
       connectOutlets: function (router, context) {
-        if (App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+        if (App.isAccessible('upgrade_ONLY_ADMIN')) {
           App.router.get('experimentalController').loadSupports().complete(function () {
             $('title').text(Em.I18n.t('app.name.subtitle.experimental'));
             router.get('applicationController').connectOutlet('experimental');

+ 1 - 1
ambari-web/app/routes/add_alert_definition_routes.js

@@ -23,7 +23,7 @@ module.exports = App.WizardRoute.extend({
   route: '/alerts/add',
 
   enter: function (router) {
-    if (App.isAuthorized('SERVICE.TOGGLE_ALERTS')) {
+    if (App.isAccessible('ADMIN')) {
       Em.run.next(function () {
         var addAlertDefinitionController = router.get('addAlertDefinitionController');
         App.router.get('updateController').set('isWorking', false);

+ 1 - 1
ambari-web/app/routes/add_service_routes.js

@@ -23,7 +23,7 @@ module.exports = App.WizardRoute.extend({
   route: '/service/add',
 
   enter: function (router) {
-    if (App.isAuthorized('SERVICE.ADD_DELETE_SERVICES')) {
+    if (App.isAccessible('ADMIN')) {
       // `getSecurityStatus` call is required to retrieve information related to kerberos type: Manual or automated kerberos
       router.get('mainController').isLoading.call(router.get('clusterController'),'isClusterNameLoaded').done(function () {
         App.router.get('mainAdminKerberosController').getSecurityStatus().always(function () {

+ 1 - 1
ambari-web/app/routes/installer.js

@@ -40,7 +40,7 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
             $('#main').addClass('install-wizard-content');
 
             App.router.get('mainViewsController').loadAmbariViews();
-            if (App.isAuthorized('AMBARI.ADD_DELETE_CLUSTERS')) {
+            if (App.isAccessible('ADMIN')) {
               router.get('mainController').stopPolling();
               Em.run.next(function () {
                 App.clusterStatus.updateFromServer().complete(function () {

+ 3 - 3
ambari-web/app/routes/main.js

@@ -49,7 +49,7 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
                       var currentClusterStatus = App.clusterStatus.get('value');
                       if (router.get('currentState.parentState.name') !== 'views'
                           && currentClusterStatus && self.get('installerStatuses').contains(currentClusterStatus.clusterState)) {
-                        if (App.isAuthorized('AMBARI.ADD_DELETE_CLUSTERS')) {
+                        if (App.isAccessible('ADMIN')) {
                           self.redirectToInstaller(router, currentClusterStatus, false);
                         } else {
                           Em.run.next(function () {
@@ -327,7 +327,7 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
   admin: Em.Route.extend({
     route: '/admin',
     enter: function (router, transition) {
-      if (router.get('loggedIn') && !App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+      if (router.get('loggedIn') && !App.isAccessible('upgrade_ADMIN')) {
         Em.run.next(function () {
           router.transitionTo('main.dashboard.index');
         });
@@ -335,7 +335,7 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
     },
 
     routePath: function (router, event) {
-      if (!App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+      if (!App.isAccessible('upgrade_ADMIN')) {
         Em.run.next(function () {
           App.router.transitionTo('main.dashboard.index');
         });

+ 6 - 6
ambari-web/app/templates/application.hbs

@@ -63,25 +63,25 @@
                 <li><a href="" id="about" {{action showAboutPopup target="controller"}}>{{t app.aboutAmbari}}</a></li>
                 {{#if App.router.clusterInstallCompleted}}
                   {{#if isClusterDataLoaded}}
-                    {{#isAuthorized "CLUSTER.UPGRADE_DOWNGRADE_STACK"}}
+                    {{#isAccessible upgrade_ONLY_ADMIN}}
                       <li><a href=""
                              id="manage-ambari" {{action goToAdminView target="controller"}}>{{t app.manageAmbari}}</a>
                       </li>
-                    {{/isAuthorized}}
+                    {{/isAccessible}}
                   {{/if}}
                 {{else}}
                   {{#if App.isPermissionDataLoaded}}
-                    {{#isAuthorized "CLUSTER.UPGRADE_DOWNGRADE_STACK"}}
+                    {{#isAccessible upgrade_ONLY_ADMIN}}
                       <li><a href=""
                              id="manage-ambari" {{action goToAdminView target="controller"}}>{{t app.manageAmbari}}</a>
                       </li>
-                    {{/isAuthorized}}
+                    {{/isAccessible}}
                   {{/if}}
                 {{/if}}
                 {{#if isClusterDataLoaded}}
-                  {{#isAuthorized "CLUSTER.UPGRADE_DOWNGRADE_STACK"}}
+                  {{#isAccessible upgrade_ADMIN}}
                     <li><a href="" {{action showSettingsPopup target="App.router.userSettingsController"}}>{{t app.settings}}</a></li>
-                  {{/isAuthorized}}
+                  {{/isAccessible}}
                 {{/if}}
                 {{#if showExitLink}}
                   <li class="break"></li>

+ 6 - 6
ambari-web/app/templates/common/configs/config_history_flow.hbs

@@ -29,7 +29,7 @@
 
   </div>
   <div class="version-info-bar-wrapper">
-    {{#isAuthorized "SERVICE.COMPARE_CONFIGS"}}
+    {{#isAccessible MANAGER}}
       <div {{bindAttr class="view.showCompareVersionBar::hidden :version-info-bar"}}>
           <div class="row-fluid">
               <div class="span1 remove-compare-bar" {{action removeCompareVersionBar target="view"}} data-toggle="arrow-tooltip" {{translateAttr data-original-title="services.service.config.configHistory.dismissIcon.tooltip"}}>
@@ -52,7 +52,7 @@
               </div>
           </div>
       </div>
-    {{/isAuthorized}}
+    {{/isAccessible}}
       <div class="version-info-bar">
         <div class="row-fluid">
             <div class="btn-group pull-left">
@@ -79,10 +79,10 @@
                       </div>
                       <div class="version-operations-buttons">
                         <button {{bindAttr disabled="serviceVersion.disabledActionAttr.view" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.view"}} {{action doAction serviceVersion view.actionTypes.SWITCH target="view"}}><i class="icon-search"></i>&nbsp;{{t common.view}}</button>
-                        {{#isAuthorized "SERVICE.COMPARE_CONFIGS"}}
+                        {{#isAccessible MANAGER}}
                           <button {{bindAttr disabled="serviceVersion.disabledActionAttr.compare" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.compare"}} {{action doAction serviceVersion view.actionTypes.COMPARE target="view"}}><i class="icon-copy"></i>&nbsp;{{t common.compare}}</button>
                           <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor serviceVersion.isCompatible::hidden" title="serviceVersion.disabledActionMessages.revert"}} {{action doAction serviceVersion view.actionTypes.REVERT target="view"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button>
-                        {{/isAuthorized}}
+                        {{/isAccessible}}
                       </div>
                     </ul>
                   </li>
@@ -108,7 +108,7 @@
                 <strong>{{view.displayedServiceVersion.author}}</strong>&nbsp;{{t dashboard.configHistory.info-bar.authoredOn}}&nbsp;<strong>{{view.displayedServiceVersion.createdDate}}</strong>
               {{/if}}
             </div>
-          {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}}
+          {{#isAccessible MANAGER}}
             <div class="pull-right operations-button">
                 <div {{bindAttr class="view.displayedServiceVersion.isCurrent::hidden"}}>
                     <button class="btn" {{action doCancel target="controller"}} {{bindAttr disabled="view.isDiscardDisabled"}}>{{t common.discard}}</button>
@@ -116,7 +116,7 @@
                 </div>
                 <button class="btn btn-success"  {{action doAction view.serviceVersionsReferences.displayed view.actionTypes.REVERT target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.displayedServiceVersion.canBeMadeCurrent::hidden"}}>{{view.displayedServiceVersion.makeCurrentButtonText}}</button>
             </div>
-          {{/isAuthorized}}
+          {{/isAccessible}}
         </div>
       </div>
   </div>

+ 4 - 4
ambari-web/app/templates/common/configs/notifications_configs.hbs

@@ -46,7 +46,7 @@
               {{view viewClass serviceConfigBinding="this" categoryConfigsAllBinding="view.categoryConfigsAll" }}
 
               {{#if isRemovable}}
-                {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}}
+                {{#isAccessible ADMIN}}
                   {{#unless this.isComparison}}
                     <a class="btn-small" href="#" data-toggle="tooltip"
                       {{action "removeProperty" this target="view"}}
@@ -54,7 +54,7 @@
                       <i class="icon-minus-sign"></i>
                     </a>
                   {{/unless}}
-                {{/isAuthorized}}
+                {{/isAccessible}}
               {{/if}}
 
               <span class="help-inline">{{errorMessage}}</span>
@@ -72,7 +72,7 @@
         {{view Ember.RadioButton name="tlsOrSsl" disabledBinding="view.configsAreDisabled" selectionBinding="view.tlsOrSsl" value="ssl"}} {{t installer.step7.misc.notification.use_ssl}}
       </div>
 
-      {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}}
+      {{#isAccessible ADMIN}}
         {{#if view.canEdit}}
           {{#unless view.configsAreDisabled}}
             <div class="entry-row indent-1">
@@ -80,7 +80,7 @@
             </div>
           {{/unless}}
         {{/if}}
-      {{/isAuthorized}}
+      {{/isAccessible}}
     </form>
   </div>
 </div>

+ 2 - 2
ambari-web/app/templates/common/configs/overriddenProperty.hbs

@@ -42,13 +42,13 @@
             <i class="icon-undo"></i>
           </a>
         {{/if}}
-        {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}}
+        {{#isAccessible ADMIN}}
           <a class="btn-small" href="#" data-toggle="tooltip"
             {{action "removeOverride" overriddenSCP target="view"}}
             {{translateAttr data-original-title="common.remove"}}>
             <i class="icon-minus-sign"></i>
           </a>
-        {{/isAuthorized}}
+        {{/isAccessible}}
           <span class="help-inline">{{overriddenSCP.errorMessage}}</span>
       {{else}}
         <a class="action">{{overriddenSCP.group.switchGroupTextShort}}</a> <i class="icon-spinner"></i>

+ 3 - 3
ambari-web/app/templates/common/configs/service_config.hbs

@@ -70,13 +70,13 @@
         <div class="pull-left spinner"></div>
       {{/if}}
 		</span>
+    {{#isAccessible ADMIN}}
       {{#if controller.isHostsConfigsPage}}
         &nbsp;<a href="#" {{action "switchHostGroup" target="controller"}}>{{t common.change}}</a>
       {{else}}
-        {{#isAuthorized "SERVICE.MANAGE_CONFIG_GROUPS"}}
-            <a href="#" class="link-left-pad" {{action "manageConfigurationGroup" target="controller"}}>{{t services.service.actions.manage_configuration_groups.short}}</a>
-        {{/isAuthorized}}
+        <a href="#" class="link-left-pad" {{action "manageConfigurationGroup" target="controller"}}>{{t services.service.actions.manage_configuration_groups.short}}</a>
       {{/if}}
+    {{/isAccessible}}
     <div class="pull-right">
       {{view App.FilterComboCleanableView filterBinding="view.filter" columnsBinding="view.columns" popoverDescriptionBinding="view.propertyFilterPopover"}}
     </div>

+ 2 - 2
ambari-web/app/templates/common/configs/service_config_category.hbs

@@ -92,7 +92,7 @@
       {{/each}}
 
       {{! For Advanced, Advanced Core Site, Advanced HDFS Site sections, show the 'Add Property' link.}}
-      {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}}
+      {{#isAccessible ADMIN}}
         {{#if view.canEdit}}
           {{#if view.category.customCanAddProperty}}
             <div>
@@ -101,7 +101,7 @@
             </div>
           {{/if}}
         {{/if}}
-      {{/isAuthorized}}
+      {{/isAccessible}}
     </form>
   </div>
 </div>

+ 2 - 2
ambari-web/app/templates/common/configs/service_config_wizard.hbs

@@ -35,13 +35,13 @@
         {{/each}}
       </ul>
 		</span>
-    {{#isAuthorized "SERVICE.MANAGE_CONFIG_GROUPS"}}
+    {{#isAccessible ADMIN}}
       {{#if controller.isHostsConfigsPage}}
         &nbsp;<a href="#" {{action "switchHostGroup" target="controller"}}>{{t common.change}}</a>
       {{else}}
         <a href="#"  class="link-left-pad" {{action "manageConfigurationGroup" target="controller"}}>{{t services.service.actions.manage_configuration_groups.short}}</a>
       {{/if}}
-    {{/isAuthorized}}
+    {{/isAccessible}}
     <div class="pull-right">
       {{view App.FilterComboCleanableView filterBinding="view.filter" columnsBinding="view.columns" popoverDescriptionBinding="view.propertyFilterPopover"}}
     </div>

+ 2 - 2
ambari-web/app/templates/common/configs/service_version_box.hbs

@@ -44,10 +44,10 @@
       </div>
       <div class="version-operations-buttons">
         <button {{bindAttr disabled="view.disabledActionAttr.view" class=":btn view.serviceVersion.isDisplayed:not-allowed-cursor" title="view.disabledActionMessages.view"}} {{action doAction view.serviceVersion view.actionTypes.SWITCH target="view.parentView"}}><i class="icon-search"></i>&nbsp;{{t common.view}}</button>
-        {{#isAuthorized "SERVICE.COMPARE_CONFIGS"}}
+        {{#isAccessible MANAGER}}
           <button {{bindAttr disabled="view.disabledActionAttr.compare" class=":btn view.serviceVersion.isDisplayed:not-allowed-cursor" title="view.disabledActionMessages.compare"}} {{action doAction view.serviceVersion view.actionTypes.COMPARE target="view.parentView"}}><i class="icon-copy"></i>&nbsp;{{t common.compare}}</button>
           <button {{bindAttr disabled="view.disabledActionAttr.revert" class=":btn view.serviceVersion.isCurrent:not-allowed-cursor view.serviceVersion.isCompatible::hidden" title="view.disabledActionMessages.revert"}} {{action doAction view.serviceVersion view.actionTypes.REVERT target="view.parentView"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button>
-        {{/isAuthorized}}
+        {{/isAccessible}}
       </div>
     </div>
   </div>

+ 4 - 4
ambari-web/app/templates/common/configs/widgets/controls.hbs

@@ -69,18 +69,18 @@
       {{/if}}
       {{#unless view.isOriginalSCP}}
         {{#unless view.disabled}}
-          {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}}
+          {{#isAccessible ADMIN}}
             <a {{bindAttr class=":widget-action :widget-action-remove view.isHover:show:hide"}} href="#"
                                                                                                 data-toggle="tooltip"
               {{action "removeOverride" view.config target="view.parentView"}}
               {{translateAttr data-original-title="common.remove"}}>
               <i class="icon-minus-sign"></i>
             </a>
-          {{/isAuthorized}}
+          {{/isAccessible}}
         {{/unless}}
       {{/unless}}
       {{#if view.overrideAllowed}}
-        {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}}
+        {{#isAccessible ADMIN}}
           <div {{bindAttr class=":widget-action :widget-action-override view.isHover:show:hide"}}>
             <a class="widget-action widget-action-override" href="#" data-toggle="tooltip"
               {{action "createOverrideProperty" view.config target="view.parentView"}}
@@ -88,7 +88,7 @@
               <i class="icon-plus-sign"></i>
             </a>
           </div>
-        {{/isAuthorized}}
+        {{/isAccessible}}
       {{/if}}
     </div>
   </div>

+ 2 - 0
ambari-web/app/templates/common/modal_popups/widget_browser_footer.hbs

@@ -17,9 +17,11 @@
 }}
 
 <div class="modal-footer">
+  {{#isAccessible ADMIN}}
     <label id="footer-checkbox">
       {{view Ember.Checkbox classNames="checkbox" checkedBinding="view.parentView.isShowMineOnly"}} &nbsp;
       {{t dashboard.widgets.browser.footer.checkbox}}
     </label>
+  {{/isAccessible}}
   <button class="btn btn-success" {{action onPrimary target="view"}}>{{t common.close}}</button>
 </div>

+ 4 - 0
ambari-web/app/templates/common/modal_popups/widget_browser_popup.hbs

@@ -20,11 +20,13 @@
   {{#if view.isLoaded}}
     <div class="widget-browser-content">
       <!--Create new widget button-->
+      {{#isAccessible ADMIN}}
         <div class="btn-group pull-right" id="create-widget-button">
           <button type="button" class="btn btn-primary" {{action "createWidget" target="view"}} >
             <i class="icon-plus"></i> &nbsp; {{t dashboard.widgets.create}}
           </button>
         </div>
+      {{/isAccessible}}
 
       <!--Filters bar: service name filter, status filter here-->
       <ul id="services-filter-bar" class="nav nav-tabs">
@@ -62,6 +64,7 @@
                         <i class="icon-ok"></i> &nbsp; {{t dashboard.widgets.browser.action.added}}
                     </button>
                   {{else}}
+                    {{#isAccessible ADMIN}}
                       <button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
                         {{t common.more}}<span class="caret"></span>
                       </button>
@@ -79,6 +82,7 @@
                           {{/unless}}
                         </li>
                       </ul>
+                    {{/isAccessible}}
                     <button type="button" class="btn btn-default" {{action "addWidget" widget target="controller"}} >
                       {{t dashboard.widgets.browser.action.add}}
                     </button>

+ 2 - 0
ambari-web/app/templates/common/widget/gauge_widget.hbs

@@ -22,6 +22,7 @@
       <i class="icon-remove-sign icon-large"></i>
     </a>
     <div class="caption title span11">{{view.content.widgetName}}</div>
+    {{#isAccessible ADMIN}}
       <div class="widget-icons">
         <a class="corner-icon pull-right" href="#" {{action editWidget target="view"}}>
           <i class="icon-edit"></i>
@@ -30,6 +31,7 @@
           <i class="icon-copy"></i>
         </a>
       </div>
+    {{/isAccessible}}
     <div class="content">
       {{#if view.isUnavailable}}
         {{#if view.isOverflowed}}

+ 2 - 0
ambari-web/app/templates/common/widget/graph_widget.hbs

@@ -22,6 +22,7 @@
       <i class="icon-remove-sign icon-large"></i>
     </a>
     <div class="caption title span11">{{view.content.widgetName}}</div>
+    {{#isAccessible ADMIN}}
       <div class="widget-icons">
         <a {{bindAttr class="view.isExportButtonHidden:hidden :corner-icon :pull-right"}} href="#" {{action toggleFormatsList target="view"}}>
           <i class="icon-save"></i>
@@ -34,6 +35,7 @@
         </a>
         {{view view.exportMetricsMenuView}}
       </div>
+    {{/isAccessible}}
     <div class="content"> {{view view.graphView}}</div>
 
   {{else}}

+ 2 - 0
ambari-web/app/templates/common/widget/number_widget.hbs

@@ -22,6 +22,7 @@
       <i class="icon-remove-sign icon-large"></i>
     </a>
     <div class="caption title span11">{{view.content.widgetName}}</div>
+    {{#isAccessible ADMIN}}
     <div class="widget-icons">
       <a class="corner-icon pull-right" href="#" {{action editWidget target="view"}}>
         <i class="icon-edit"></i>
@@ -30,6 +31,7 @@
         <i class="icon-copy"></i>
       </a>
       </div>
+    {{/isAccessible}}
     <div {{bindAttr class="view.contentColor :content"}}>{{view.displayValue}}</div>
     {{#if view.content.description}}
       <div class="hidden-description">

+ 2 - 0
ambari-web/app/templates/common/widget/template_widget.hbs

@@ -22,6 +22,7 @@
       <i class="icon-remove-sign icon-large"></i>
     </a>
     <div class="caption title span11">{{view.content.widgetName}}</div>
+    {{#isAccessible ADMIN}}
       <div class="widget-icons">
         <a class="corner-icon pull-right" href="#" {{action editWidget target="view"}}>
           <i class="icon-edit"></i>
@@ -30,6 +31,7 @@
           <i class="icon-copy"></i>
         </a>
       </div>
+    {{/isAccessible}}
     <div {{bindAttr class="view.contentColor :content"}}>{{{view.displayValue}}}</div>
     {{#if view.content.description}}
       <div class="hidden-description">

+ 6 - 6
ambari-web/app/templates/main/admin/kerberos.hbs

@@ -19,7 +19,7 @@
   {{#if securityEnabled}}
     <div>
       <p class="text-success">{{t admin.security.enabled}}
-        {{#isAuthorized "CLUSTER.TOGGLE_KERBEROS"}}
+        {{#isAccessible ADMIN}}
           <button class="btn btn-padding btn-warning admin-disable-security-btn" {{bindAttr disabled="isKerberosButtonsDisabled"}} {{action notifySecurityOffPopup target="controller"}}>{{t admin.kerberos.button.disable}} </button>
           {{#unless isManualKerberos}}
             <button class="btn btn-success" id="regenerate-keytabs" {{bindAttr disabled="isKerberosButtonsDisabled"}} {{action regenerateKeytabs target="controller"}}>
@@ -37,7 +37,7 @@
               {{t common.edit}}
             </a>
           {{/unless}}
-        {{/isAuthorized}}
+        {{/isAccessible}}
       </p>
     </div>
     <div id="serviceConfig">
@@ -55,10 +55,10 @@
   {{else}}
     <div>
       <p class="muted background-text">{{t admin.security.disabled}}
-      {{#isAuthorized "CLUSTER.TOGGLE_KERBEROS"}}
-        <a class="btn btn-padding btn-success admin-enable-security-btn" {{action checkAndStartKerberosWizard target="controller"}}>{{t admin.kerberos.button.enable}} </a>
-        <br/>
-      {{/isAuthorized}}
+        {{#isAccessible ADMIN}}
+          <a class="btn btn-padding btn-success admin-enable-security-btn" {{action checkAndStartKerberosWizard target="controller"}}>{{t admin.kerberos.button.enable}} </a>
+          <br/>
+        {{/isAccessible}}
       </p>
     </div>
   {{/if}}

+ 2 - 2
ambari-web/app/templates/main/admin/stack_upgrade/versions.hbs

@@ -36,11 +36,11 @@
       {{/each}}
     </ul>
   </div>
-  {{#isAuthorized "CLUSTER.UPGRADE_DOWNGRADE_STACK"}}
+  {{#isAccessible upgrade_ONLY_ADMIN}}
     <button class="btn btn-primary pull-right" {{action goToVersions target="view"}} id="manage-versions-link">
       <i class="icon-external-link"></i>&nbsp;{{t admin.stackVersions.manageVersions}}
     </button>
-  {{/isAuthorized}}
+  {{/isAccessible}}
 </div>
 <div class="row-fluid">
   {{#if isLoaded}}

+ 17 - 7
ambari-web/app/templates/main/alerts.hbs

@@ -16,11 +16,11 @@
 * limitations under the License.
 }}
 
-{{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
+{{#isAccessible ADMIN}}
   <div id="alert-actions-button" class="pull-left">
     {{view App.MainAlertDefinitionActionsView controllerBinding="App.router.mainAlertDefinitionActionsController"}}
   </div>
-{{/isAuthorized}}
+{{/isAccessible}}
 
 <div id="alert-groups-filter" class="pull-left advanced-header-table groups-filter">
 {{#if App.router.clusterController.isAlertsLoaded}}
@@ -63,22 +63,32 @@
               <time class="timeago" {{bindAttr data-original-title="alertDefinition.lastTriggeredFormatted"}}>{{alertDefinition.lastTriggeredAgoFormatted}}</time>
             </td>
             <td class="last toggle-state-button alert-state">
-              {{#if alertDefinition.enabled not=true}}
-                {{#isAuthorized "CLUSTER.TOGGLE_ALERTS"}}
+              {{#if alertDefinition.enabled}}
+                {{#isAccessible ADMIN}}
                   <a href="#" {{action "toggleState" alertDefinition target="controller"}} {{bindAttr class="alertDefinition.enabled:alert-definition-enable:alert-definition-disable"}}>
                   <span class="enable-disable-button" {{bindAttr data-original-title="view.enabledTooltip"}}>
                     {{view.enabledDisplay}}
                   </span>
                   </a>
-                {{/isAuthorized}}
+                {{/isAccessible}}
+                {{#isAccessible NON_ADMIN}}
+                  <span {{bindAttr class="alertDefinition.enabled:alert-definition-enable:alert-definition-disable"}}>
+                    {{t alerts.table.state.enabled}}
+                  </span>
+                {{/isAccessible}}
               {{else}}
-                {{#isAuthorized "CLUSTER.TOGGLE_ALERTS"}}
+                {{#isAccessible ADMIN}}
                   <a href="#" {{action "toggleState" alertDefinition target="controller"}} {{bindAttr class="alertDefinition.enabled:alert-definition-enable:alert-definition-disable"}}>
                   <span class="enable-disable-button" {{bindAttr data-original-title="view.disabledTooltip"}}>
                     {{view.disabledDisplay}}
                   </span>
                   </a>
-                {{/isAuthorized}}
+                {{/isAccessible}}
+                {{#isAccessible NON_ADMIN}}
+                  <span {{bindAttr class="alertDefinition.enabled:alert-definition-enable:alert-definition-disable"}}>
+                    {{t alerts.table.state.disabled}}
+                  </span>
+                {{/isAccessible}}
               {{/if}}
             </td>
           </tr>

+ 18 - 8
ambari-web/app/templates/main/alerts/definition_details.hbs

@@ -41,10 +41,10 @@
           </span>
         {{/if}}
         {{#unless controller.editing.label.isEditing}}
-          {{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
+          {{#isAccessible ADMIN}}
             <a {{action edit controller.editing.label target="controller"}} class="edit-description-button"><i
                 class="icon-pencil"></i></a>
-          {{/isAuthorized}}
+          {{/isAccessible}}
         {{/unless}}
       </div>
       {{! Alert Definition Name end }}
@@ -69,14 +69,14 @@
           <h4>{{t common.configuration}}</h4>
         </div>
         <div class="pull-right span5 row-fluid" style="padding:0 10px;">
-          {{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
+          {{#isAccessible ADMIN}}
             {{#unless App.router.mainAlertDefinitionConfigsController.canEdit}}
               <a {{action editConfigs target="App.router.mainAlertDefinitionConfigsController"}}
                   class="pull-right edit-link">
                 {{t common.edit}}
               </a>
             {{/unless}}
-          {{/isAuthorized}}
+          {{/isAccessible}}
         </div>
       </div>
       {{view App.AlertDefinitionConfigsView contentBinding="view.controller.content" alertDefinitionTypeBinding="view.controller.content.type" canEdit=false}}
@@ -100,23 +100,33 @@
           <div class="span4 property-name">{{t alerts.table.state}}:</div>
           <div class="span8">
             {{#if controller.content.enabled}}
-              {{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
+              {{#isAccessible ADMIN}}
                 <a href="#" {{action "toggleState" controller.content target="controller"}} {{bindAttr class="controller.content.enabled:alert-definition-enable:alert-definition-disable"}}>
                   <span
                       class="enable-disable-button" {{translateAttr data-original-title="alerts.table.state.enabled.tooltip"}}>
                     {{view.enabledDisplay}}
                   </span>
                 </a>
-              {{/isAuthorized}}
+              {{/isAccessible}}
+              {{#isAccessible NON_ADMIN}}
+                <span {{bindAttr class="controller.content.enabled:alert-definition-enable:alert-definition-disable"}}>
+                  {{t alerts.table.state.enabled}}
+                </span>
+              {{/isAccessible}}
             {{else}}
-              {{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
+              {{#isAccessible ADMIN}}
                 <a href="#" {{action "toggleState" controller.content target="controller"}} {{bindAttr class="controller.content.enabled:alert-definition-enable:alert-definition-disable"}}>
                   <span
                       class="enable-disable-button" {{translateAttr data-original-title="alerts.table.state.disabled.tooltip"}}>
                     {{view.disabledDisplay}}
                   </span>
                 </a>
-              {{/isAuthorized}}
+              {{/isAccessible}}
+              {{#isAccessible NON_ADMIN}}
+                <span {{bindAttr class="controller.content.enabled:alert-definition-enable:alert-definition-disable"}}>
+                  {{t alerts.table.state.disabled}}
+                </span>
+              {{/isAccessible}}
             {{/if}}
           </div>
         </div>

+ 2 - 2
ambari-web/app/templates/main/host.hbs

@@ -20,9 +20,9 @@
 
   <div class="box-header row">
     <div class="hosts-actions pull-left">
-      {{#isAuthorized "HOST.ADD_DELETE_COMPONENTS, HOST.TOGGLE_MAINTENANCE, HOST.ADD_DELETE_HOSTS"}}
+      {{#isAccessible ADMIN}}
         {{view App.HostTableMenuView}}
-      {{/isAuthorized}}
+      {{/isAccessible}}
     </div>
     <div class="health-status-bar pull-left">
       {{#view view.statusFilter categoriesBinding="view.categories"}}

+ 2 - 2
ambari-web/app/templates/main/host/bulk_operation_menu.hbs

@@ -19,10 +19,10 @@
 <div class="dropdown bulk-menu">
   <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">{{t common.actions}} <span class="caret"></span></a>
   <ul class="dropdown-menu">
-    {{#isAuthorized "HOST.ADD_DELETE_HOSTS"}}
+    {{#isAccessible ADMIN}}
       <li><a href="#" {{action addHost}}><i class="icon-plus icon-white"></i> {{t hosts.host.add}}</a></li>
       <li class="divider"></li>
-    {{/isAuthorized}}
+    {{/isAccessible}}
     <li class="dropdown-submenu">
       <a {{bindAttr class="view.parentView.showSelectedFilter::disabled"}} tabindex="-1" href="javascript:void(null);">{{view.menuItems.s.label}}
         ({{view.parentView.selectedHosts.length}})</a>

+ 2 - 0
ambari-web/app/templates/main/host/details.hbs

@@ -31,6 +31,7 @@
     </div>
     <div class="content">
       {{view App.MainHostMenuView hostBinding="view.content"}}
+      {{#isAccessible ADMIN}}
         <div class="service-button">
           <div class="btn-group display-inline-block">
             <a href="javascript:void(null)" {{bindAttr class=":btn :dropdown-toggle"}} id="host-details-action-btn" data-toggle="dropdown">
@@ -63,6 +64,7 @@
             </ul>
           </div>
         </div>
+      {{/isAccessible}}
       {{outlet}}
     </div>
   </div>

+ 23 - 31
ambari-web/app/templates/main/host/details/host_component.hbs

@@ -18,11 +18,11 @@
 
 <div class="span7 component-label">
   {{#if view.isUpgradeFailed}}
-    {{#isAuthorized "HOST.ADD_DELETE_COMPONENTS"}}
+    {{#isAccessible ADMIN}}
       <a href="#" {{action "upgradeComponent" view.content target="controller"}} >
         <i title="Component upgrade failed" class="components-health icon-arrow-up"></i>
       </a>
-    {{/isAuthorized}}
+    {{/isAccessible}}
   {{else}}
     <span rel='componentHealthTooltip' {{bindAttr class="view.statusClass view.statusIconClass :components-health" data-original-title="view.componentTextStatus"}}></span>&nbsp;
   {{/if}}
@@ -42,7 +42,7 @@
   {{/unless}}
 </div>
 <div class="span5 pull-right">
-  {{#isAuthorized "SERVICE.DECOMMISSION_RECOMMISSION"}}
+  {{#isAccessible ADMIN}}
     <div class="btn-group pull-right">
       <a {{ bindAttr class="view.disabled :btn :dropdown-toggle"}} data-toggle="dropdown">
         {{view.componentTextStatus}}
@@ -63,24 +63,22 @@
           </li>
         {{/if}}
         {{#unless view.isInstalling}}
-          {{#isAuthorized "SERVICE.START_STOP"}}
-            {{#if view.isStart}}
-              <li {{bindAttr class="view.isComponentDecommissioning:hidden view.noActionAvailable"}}>
-                <a href="javascript:void(null)" data-toggle="modal" {{action "stopComponent" view.content target="controller"}}>
-                  {{t common.stop}}
+          {{#if view.isStart}}
+            <li {{bindAttr class="view.isComponentDecommissioning:hidden view.noActionAvailable"}}>
+              <a href="javascript:void(null)" data-toggle="modal" {{action "stopComponent" view.content target="controller"}}>
+                {{t common.stop}}
+              </a>
+            </li>
+          {{/if}}
+          {{#unless view.isStart}}
+            {{#unless view.isInit}}
+              <li {{bindAttr class="view.isUpgradeFailed:hidden view.isInstallFailed:hidden view.isDecommissioning:hidden view.noActionAvailable"}}>
+                <a href="javascript:void(null)" data-toggle="modal" {{action "startComponent" view.content target="controller"}}>
+                  {{t common.start}}
                 </a>
               </li>
-            {{/if}}
-            {{#unless view.isStart}}
-              {{#unless view.isInit}}
-                <li {{bindAttr class="view.isUpgradeFailed:hidden view.isInstallFailed:hidden view.isDecommissioning:hidden view.noActionAvailable"}}>
-                  <a href="javascript:void(null)" data-toggle="modal" {{action "startComponent" view.content target="controller"}}>
-                    {{t common.start}}
-                  </a>
-                </li>
-              {{/unless}}
             {{/unless}}
-          {{/isAuthorized}}
+          {{/unless}}
           {{#if view.isUpgradeFailed}}
             <li {{bindAttr class="view.noActionAvailable"}}>
               <a href="javascript:void(null)" data-toggle="modal" {{action "upgradeComponent" view.content target="controller"}}>
@@ -96,16 +94,13 @@
             </li>
           {{/if}}
           {{#if view.isReassignable}}
-            {{#isAuthorized "SERVICE.MOVE"}}
-              <li {{bindAttr class="view.noActionAvailable view.isMoveComponentDisabled:disabled"}}>
-                <a href="javascript:void(null)" data-toggle="modal" {{action "moveComponent" view.content target="controller"}}>
-                  {{t common.move}}
-                </a>
-              </li>
-            {{/isAuthorized}}
+            <li {{bindAttr class="view.noActionAvailable view.isMoveComponentDisabled:disabled"}}>
+              <a href="javascript:void(null)" data-toggle="modal" {{action "moveComponent" view.content target="controller"}}>
+                {{t common.move}}
+              </a>
+            </li>
           {{/if}}
-          {{#isAuthorized "HOST.TOGGLE_MAINTENANCE"}}
-            <li {{bindAttr class="view.noActionAvailable"}}>
+          <li {{bindAttr class="view.noActionAvailable"}}>
             <a href="javascript:void(null)"
                data-toggle="modal" {{action "toggleMaintenanceMode" view.content target="controller"}}>
               {{#if view.isActive}}
@@ -115,7 +110,6 @@
               {{/if}}
             </a>
           </li>
-          {{/isAuthorized}}
         {{/unless}}
         {{#if view.isInit}}
           <li>
@@ -125,13 +119,11 @@
           </li>
         {{/if}}
         {{#if view.isDeletableComponent}}
-          {{#isAuthorized "HOST.ADD_DELETE_COMPONENTS"}}
             <li {{bindAttr class="view.isDeleteComponentDisabled:disabled"}}>
                 <a href="javascript:void(null)" data-toggle="modal" {{action "deleteComponent" view.content target="controller"}}>
                   {{t common.delete}}
                 </a>
             </li>
-          {{/isAuthorized}}
         {{/if}}
         {{#if view.isRefreshConfigsAllowed}}
             <li>
@@ -148,5 +140,5 @@
       {{/each}}
       </ul>
     </div>
-  {{/isAuthorized}}
+  {{/isAccessible}}
 </div>

+ 2 - 2
ambari-web/app/templates/main/host/stack_versions.hbs

@@ -51,9 +51,9 @@
           {{/if}}
         </td>
         <td class="install-repo-version align-center">
-          {{#isAuthorized "AMBARI.MANAGE_STACK_VERSIONS"}}
+          {{#isAccessible ADMIN}}
             <button class="btn" {{action installVersionConfirmation this target="controller"}} {{bindAttr disabled="this.installDisabled"}}><i class="icon-off"></i>&nbsp;{{t common.install}}</button>
-          {{/isAuthorized}}
+          {{/isAccessible}}
         </td>
       </tr>
     {{/each}}

+ 8 - 8
ambari-web/app/templates/main/host/summary.hbs

@@ -26,7 +26,7 @@
             <h4>{{t common.components}}</h4>
           </div>
           <div class="pull-right span5 row-fluid" style="padding:0 10px;">
-            {{#isAuthorized "HOST.ADD_DELETE_COMPONENTS"}}
+            {{#isAccessible ADMIN}}
               <div class="btn-group pull-right">
                 <button id="add_component" data-toggle="dropdown" {{bindAttr class="view.addComponentDisabled:disabled :btn :dropdown-toggle"}}>
                   <span class="icon-plus"></span>&nbsp;{{t add}}
@@ -41,13 +41,13 @@
                   {{/each}}
                 </ul>
               </div>
-            {{/isAuthorized}}
+            {{/isAccessible}}
           </div>
         </div>
         <div class="host-components">
         {{#if view.sortedComponents.length}}
 
-          {{#isAuthorized "SERVICE.MODIFY_CONFIGS, SERVICE.START_STOP, HOST.ADD_DELETE_COMPONENTS, HOST.TOGGLE_MAINTENANCE"}}
+          {{#isAccessible ADMIN}}
             {{#if view.content.componentsWithStaleConfigsCount}}
               <div class="alert alert-warning clearfix">
                 <i class="icon-refresh"></i> {{view.needToRestartMessage}}
@@ -56,7 +56,7 @@
                   </button>
               </div>
             {{/if}}
-          {{/isAuthorized}}
+          {{/isAccessible}}
 
           {{#each component in view.sortedComponents}}
             <div class="row-fluid">
@@ -77,7 +77,7 @@
               {{/if}}
             </div>
             <div class="span5 row">
-              {{#isAuthorized "SERVICE.MODIFY_CONFIGS, SERVICE.START_STOP, HOST.ADD_DELETE_COMPONENTS, HOST.TOGGLE_MAINTENANCE"}}
+              {{#isAccessible ADMIN}}
                 {{#if view.clients.length}}
                   <div class="btn-group pull-right">
                     <button id="add_component" data-toggle="dropdown" {{bindAttr class=":btn :dropdown-toggle controller.content.isNotHeartBeating:disabled"}}>
@@ -115,7 +115,7 @@
                     </ul>
                   </div>
                 {{/if}}
-              {{/isAuthorized}}
+              {{/isAccessible}}
             </div>
           </div>
         </div>
@@ -136,9 +136,9 @@
 
                         <dt class="summary-rack-label">{{t common.rack}}:</dt>
                         <dd class="summary-rack-value">&nbsp;{{view.content.rack}}
-                          {{#isAuthorized "HOST.TOGGLE_MAINTENANCE"}}
+                          {{#isAccessible MANAGER}}
                             <a class="set-rack-id" {{action setRackId view.content target="controller"}}><i class="icon-pencil"></i></a>
-                          {{/isAuthorized}}
+                          {{/isAccessible}}
                         </dd>
 
                         <dt class="summary-os-label">{{t common.os}}:</dt>

+ 40 - 44
ambari-web/app/templates/main/service/all_services_actions.hbs

@@ -16,49 +16,45 @@
 * limitations under the License.
 }}
 
-{{#isAuthorized "SERVICE.START_STOP, SERVICE.ADD_DELETE_SERVICES"}}
-    <div class="service-button" style="margin-top: 10px;">
-        <div class="btn-group display-inline-block span11 offset1">
-            <a class="btn dropdown-toggle span10" data-toggle="dropdown" href="#">{{t common.actions}}
-                <span class="caret"></span>
+{{#isAccessible ADMIN}}
+  <div class="service-button" style="margin-top: 10px;">
+    <div class="btn-group display-inline-block span11 offset1">
+      <a class="btn dropdown-toggle span10" data-toggle="dropdown" href="#">{{t common.actions}}
+        <span class="caret"></span>
+      </a>
+      <ul class="pull-left dropdown-menu">
+          <li {{bindAttr class="controller.isAllServicesInstalled:disabled"}}>
+            <a href="#"
+              {{bindAttr class="controller.isAllServicesInstalled:disabled"}}
+              {{action gotoAddService target="controller"}}>
+              <i class="icon-plus icon-white"></i> {{t services.service.add}}</a>
+          </li>
+          <li class="divider"></li>
+          <li {{bindAttr class="controller.isStartAllDisabled:disabled" }}>
+            <a href="#" data-toggle="modal"
+              {{bindAttr class="controller.isStartAllDisabled:disabled" }}
+              {{action "startAllService" target="controller"}}>
+              <i {{bindAttr class=":icon-play controller.isStartAllDisabled:disabled:enabled " }}></i>
+              {{t services.service.startAll}}
             </a>
-            <ul class="pull-left dropdown-menu">
-                {{#isAuthorized "SERVICE.START_STOP"}}
-                    <li {{bindAttr class="controller.isAllServicesInstalled:disabled"}}>
-                        <a href="#"
-                            {{bindAttr class="controller.isAllServicesInstalled:disabled"}}
-                            {{action gotoAddService target="controller"}}>
-                            <i class="icon-plus icon-white"></i> {{t services.service.add}}</a>
-                    </li>
-                {{/isAuthorized}}
-                {{#isAuthorized "SERVICE.ADD_DELETE_SERVICES"}}
-                    <li class="divider"></li>
-                    <li {{bindAttr class="controller.isStartAllDisabled:disabled" }}>
-                        <a href="#" data-toggle="modal"
-                            {{bindAttr class="controller.isStartAllDisabled:disabled" }}
-                            {{action "startAllService" target="controller"}}>
-                            <i {{bindAttr class=":icon-play controller.isStartAllDisabled:disabled:enabled " }}></i>
-                            {{t services.service.startAll}}
-                        </a>
-                    </li>
-                    <li {{bindAttr class="controller.isStopAllDisabled:disabled" }}>
-                        <a href="#" data-toggle="modal"
-                            {{bindAttr class="controller.isStopAllDisabled:disabled" }}
-                            {{action "stopAllService" target="controller"}}>
-                            <i {{bindAttr class=":icon-stop controller.isStopAllDisabled:disabled:enabled" }}></i>
-                            {{t services.service.stopAll}}
-                        </a>
-                    </li>
-                    <li {{bindAttr class="controller.isRestartAllRequiredDisabled:disabled" }}>
-                        <a href="#" data-toggle="modal"
-                            {{bindAttr class="controller.isRestartAllRequiredDisabled:disabled" }}
-                            {{action "restartAllRequired" target="controller"}}>
-                            <i {{bindAttr class=":icon-repeat controller.isRestartAllRequiredDisabled:disabled:enabled" }}></i>
-                            {{t services.service.restartAllRequired}}
-                        </a>
-                    </li>
-                {{/isAuthorized}}
-            </ul>
-        </div>
+          </li>
+          <li {{bindAttr class="controller.isStopAllDisabled:disabled" }}>
+            <a href="#" data-toggle="modal"
+              {{bindAttr class="controller.isStopAllDisabled:disabled" }}
+              {{action "stopAllService" target="controller"}}>
+              <i {{bindAttr class=":icon-stop controller.isStopAllDisabled:disabled:enabled" }}></i>
+              {{t services.service.stopAll}}
+            </a>
+          </li>
+          <li {{bindAttr class="controller.isRestartAllRequiredDisabled:disabled" }}>
+            <a href="#" data-toggle="modal"
+              {{bindAttr class="controller.isRestartAllRequiredDisabled:disabled" }}
+              {{action "restartAllRequired" target="controller"}}>
+              <i {{bindAttr class=":icon-repeat controller.isRestartAllRequiredDisabled:disabled:enabled" }}></i>
+              {{t services.service.restartAllRequired}}
+            </a>
+          </li>
+      </ul>
     </div>
-{{/isAuthorized}}
+  </div>
+{{/isAccessible}}

+ 2 - 2
ambari-web/app/templates/main/service/info/configs.hbs

@@ -19,7 +19,7 @@
 <div id="serviceConfig">
   {{#if dataIsLoaded}}
     {{#if controller.content.isRestartRequired}}
-      {{#isAuthorized "SERVICE.START_STOP"}}
+      {{#isAccessible ADMIN}}
         <div>
           <div class="alert alert-warning clearfix">
             <i class="icon-refresh"></i> {{t services.service.config.restartService.needToRestart}}  <a
@@ -45,7 +45,7 @@
             </div>
           </div>
         </div>
-      {{/isAuthorized}}
+      {{/isAccessible}}
     {{/if}}
     <div class="clearfix"></div>
     {{view App.ServiceConfigView filterBinding="controller.filter" columnsBinding="controller.filterColumns" canEditBinding="controller.canEdit"}}

+ 2 - 2
ambari-web/app/templates/main/service/info/summary.hbs

@@ -17,7 +17,7 @@
 }}
 
 {{#if view.service.isRestartRequired}}
-  {{#isAuthorized "SERVICE.START_STOP"}}
+  {{#isAccessible ADMIN}}
     <div id="summary-restart-bar">
       <div class="alert alert-warning clearfix">
         <i class="icon-refresh"></i> {{{view.needToRestartMessage}}} {{t services.service.config.restartService.needToRestart}}
@@ -43,7 +43,7 @@
         </div>
       </div>
     </div>
-  {{/isAuthorized}}
+  {{/isAccessible}}
 {{/if}}
 
 <div class="service-block">

+ 26 - 30
ambari-web/app/templates/main/service/item.hbs

@@ -56,7 +56,7 @@
     {{/if}}
   </div>
 
-{{#isAuthorized "SERVICE.RUN_CUSTOM_COMMAND, SERVICE.RUN_SERVICE_CHECK, SERVICE.START_STOP, SERVICE.TOGGLE_MAINTENANCE, SERVICE.ENABLE_HA"}}
+{{#isAccessible ADMIN}}
 <div class="service-button">
   {{#if view.isMaintenanceActive}}
     <div class="btn-group display-inline-block">
@@ -68,7 +68,6 @@
         <!-- dropdown menu links -->
 
         <!-- Start/Stop service actions -->
-        {{#isAuthorized "SERVICE.START_STOP"}}
         {{#unless controller.isClientsOnlyService}}
           <li {{bindAttr class="controller.isStartDisabled:disabled"}}>
             <a href="javascript:void(null)" {{bindAttr class="controller.isStartDisabled:disabled" }}
@@ -85,36 +84,33 @@
             </a>
           </li>
         {{/unless}}
-        {{/isAuthorized}}
-        {{#isAuthorized "SERVICE.RUN_CUSTOM_COMMAND, SERVICE.RUN_SERVICE_CHECK, SERVICE.TOGGLE_MAINTENANCE, SERVICE.ENABLE_HA"}}
-          {{#if view.maintenance.length}}
-            <!-- Other service actions -->
-            {{#each option in view.maintenance}}
-            <li {{bindAttr class="option.disabled option.isHidden:hidden option.hasSubmenu:dropdown-submenu option.hasSubmenu:submenu-left"}}>
-              <a {{action "doAction" option target="controller" href=true}} {{bindAttr data-title="option.tooltip"}} rel="HealthTooltip">
-                  <i {{bindAttr class="option.cssClass"}}></i>
-                  {{option.label}}
-              </a>
-              {{#if option.hasSubmenu}}
-                <div class="dropdown-menu-wrap">
-                  <ul class="dropdown-menu">
-                    {{#each item in option.submenuOptions}}
-                      <li>
-                        <a {{action "doAction" item target="controller" href=true}}>{{item.context.label}}</a>
-                      </li>
-                    {{/each}}
-                  </ul>
-                </div>
-              {{/if}}
-            </li>
-            {{/each}}
-          {{else}}
-            <div class="spinner service-button-spinner"></div>
-          {{/if}}
-        {{/isAuthorized}}
+        {{#if view.maintenance.length}}
+          <!-- Other service actions -->
+          {{#each option in view.maintenance}}
+          <li {{bindAttr class="option.disabled option.isHidden:hidden option.hasSubmenu:dropdown-submenu option.hasSubmenu:submenu-left"}}>
+            <a {{action "doAction" option target="controller" href=true}} {{bindAttr data-title="option.tooltip"}} rel="HealthTooltip">
+                <i {{bindAttr class="option.cssClass"}}></i>
+                {{option.label}}
+            </a>
+            {{#if option.hasSubmenu}}
+              <div class="dropdown-menu-wrap">
+                <ul class="dropdown-menu">
+                  {{#each item in option.submenuOptions}}
+                    <li>
+                      <a {{action "doAction" item target="controller" href=true}}>{{item.context.label}}</a>
+                    </li>
+                  {{/each}}
+                </ul>
+              </div>
+            {{/if}}
+          </li>
+          {{/each}}
+        {{else}}
+          <div class="spinner service-button-spinner"></div>
+        {{/if}}
       </ul>
     </div>
   {{/if}}
 </div>
-{{/isAuthorized}}
+{{/isAccessible}}
 {{outlet}}

+ 0 - 4
ambari-web/app/utils/ajax/ajax.js

@@ -2059,10 +2059,6 @@ var urls = {
     real: '/privileges?PrivilegeInfo/principal_name={userName}&fields=*',
     mock: '/data/users/privileges_{userName}.json'
   },
-  'router.user.authorizations': {
-    real: '/users/{userName}/authorizations?fields=*',
-    mock: '/data/users/privileges_{userName}.json'
-  },
   'router.login.clusters': {
     'real': '/clusters?fields=Clusters/provisioning_state',
     'mock': '/data/clusters/info.json'

+ 4 - 4
ambari-web/app/utils/helper.js

@@ -360,16 +360,16 @@ Em.Handlebars.registerHelper('highlight', function (property, words, fn) {
   return new Em.Handlebars.SafeString(property);
 });
 
-Em.Handlebars.registerHelper('isAuthorized', function (property, options) {
+Em.Handlebars.registerHelper('isAccessible', function (property, options) {
   var permission = Ember.Object.create({
-    isAuthorized: function() {
-      return App.isAuthorized(property);
+    isAccessible: function() {
+      return App.isAccessible(property);
     }.property('App.router.wizardWatcherController.isWizardRunning')
   });
 
   // wipe out contexts so boundIf uses `this` (the permission) as the context
   options.contexts = null;
-  return Ember.Handlebars.helpers.boundIf.call(permission, "isAuthorized", options);
+  return Ember.Handlebars.helpers.boundIf.call(permission, "isAccessible", options);
 });
 
 /**

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

@@ -450,7 +450,7 @@ App.HostPopup = Em.Object.create({
           updatedService = this.createService(service);
           servicesInfo.insertAt(index, updatedService);
         }
-        updatedService.set('isAbortable',  App.isAuthorized('SERVICE.START_STOP') &&  this.isAbortableByStatus(service.status));
+        updatedService.set('isAbortable',  App.isAccessible('MANAGER') &&  this.isAbortableByStatus(service.status));
       }, this);
       this.removeOldServices(servicesInfo, currentServices);
       this.setBackgroundOperationHeader(isServiceListHidden);

+ 1 - 1
ambari-web/app/views/common/configs/controls_view.js

@@ -26,7 +26,7 @@ App.ControlsView = Ember.View.extend({
 	serviceConfigProperty: null,
 
 	showActions: function() {
-		return App.isAuthorized('SERVICE.MODIFY_CONFIGS') && this.get('serviceConfigProperty.isRequiredByAgent') && !this.get('serviceConfigProperty.isComparison');
+		return App.isAccessible('ADMIN') && this.get('serviceConfigProperty.isRequiredByAgent') && !this.get('serviceConfigProperty.isComparison');
 	}.property('serviceConfigProperty.isEditable', 'serviceConfigProperty.isRequiredByAgent', 'serviceConfigProperty.isComparison'),
 
 	showSwitchToGroup: Em.computed.and('!serviceConfigProperty.isEditable', 'serviceConfigProperty.group'),

+ 2 - 2
ambari-web/app/views/common/table_view.js

@@ -161,7 +161,7 @@ App.TableView = Em.View.extend(App.UserPref, {
     // this user is first time login
     var displayLengthDefault = this.get('defaultDisplayLength');
     this.set('displayLength', displayLengthDefault);
-    if (App.isAuthorized('SERVICE.VIEW_METRICS')) {
+    if (App.isAccessible('upgrade_ADMIN')) {
       this.saveDisplayLength();
     }
     this.filter();
@@ -369,7 +369,7 @@ App.TableView = Em.View.extend(App.UserPref, {
     Em.run.next(function() {
       App.db.setDisplayLength(self.get('controller.name'), self.get('displayLength'));
       if (!App.get('testMode')) {
-        if (App.isAuthorized('SERVICE.VIEW_METRICS')) {
+        if (App.isAccessible('upgrade_ADMIN')) {
           self.postUserPref(self.displayLengthKey(), self.get('displayLength'));
         }
       }

+ 2 - 2
ambari-web/app/views/main/admin/stack_upgrade/services_view.js

@@ -23,7 +23,7 @@ App.MainAdminStackServicesView = Em.View.extend({
   templateName: require('templates/main/admin/stack_upgrade/services'),
 
   isAddServiceAvailable: function () {
-    return App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK');
+    return App.isAccessible('ADMIN');
   }.property('App.supports.opsDuringRollingUpgrade', 'App.upgradeState', 'App.isAdmin'),
 
   /**
@@ -51,7 +51,7 @@ App.MainAdminStackServicesView = Em.View.extend({
    * @param event
    */
   goToAddService: function (event) {
-    if (!App.isAuthorized('SERVICE.ADD_DELETE_SERVICES')) {
+    if (!App.isAccessible('ADMIN')) {
       return;
     } else if (event.context == "KERBEROS") {
       App.router.get('mainAdminKerberosController').checkAndStartKerberosWizard();

+ 2 - 2
ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js

@@ -159,12 +159,12 @@ App.UpgradeVersionBoxView = Em.View.extend({
     }
     else if (status === 'INIT') {
       element.setProperties(statePropertiesMap[status]);
-      element.set('isDisabled', this.get('controller.requestInProgress') || isInstalling);
+      element.set('isDisabled', !App.isAccessible('ADMIN') || this.get('controller.requestInProgress') || isInstalling);
     }
     else if ((status === 'INSTALLED' && !this.get('isUpgrading')) ||
              (['INSTALL_FAILED', 'OUT_OF_SYNC'].contains(status))) {
       if (stringUtils.compareVersions(this.get('content.repositoryVersion'), Em.get(currentVersion, 'repository_version')) === 1) {
-        var isDisabled = !App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK') || this.get('controller.requestInProgress') || isInstalling;
+        var isDisabled = !App.isAccessible('ADMIN') || this.get('controller.requestInProgress') || isInstalling;
         element.set('isButtonGroup', true);
         if (status === 'OUT_OF_SYNC') {
           element.set('text', Em.I18n.t('admin.stackVersions.version.reinstall'));

+ 3 - 8
ambari-web/app/views/main/host/details.js

@@ -41,19 +41,14 @@ App.MainHostDetailsView = Em.View.extend({
 
   maintenance: function(){
     var onOff = this.get('isActive') ? "On" : "Off";
-    var result = [
+    return [
       {action: 'startAllComponents', liClass: (this.get('controller.content.isNotHeartBeating')?'disabled':'enabled'), cssClass: 'icon-play', 'label': this.t('hosts.host.details.startAllComponents')},
       {action: 'stopAllComponents', liClass: (this.get('controller.content.isNotHeartBeating')?'disabled':'enabled'), cssClass: 'icon-stop', 'label': this.t('hosts.host.details.stopAllComponents')},
       {action: 'restartAllComponents', liClass: (this.get('controller.content.isNotHeartBeating')?'disabled':'enabled'), cssClass: 'icon-repeat', 'label': this.t('hosts.host.details.restartAllComponents')},
+      {action: 'onOffPassiveModeForHost', liClass:'', cssClass: 'icon-medkit', active:this.get('isActive'), 'label': this.t('passiveState.turn' + onOff)},
+      {action: 'deleteHost', liClass:'', cssClass: 'icon-remove', 'label': this.t('hosts.host.details.deleteHost')},
       {action: 'setRackId', liClass:'', cssClass: 'icon-gear', 'label': this.t('hosts.host.details.setRackId')}
     ];
-    if (App.isAuthorized("HOST.TOGGLE_MAINTENANCE")) {
-      result.push({action: 'onOffPassiveModeForHost', liClass:'', cssClass: 'icon-medkit', active:this.get('isActive'), 'label': this.t('passiveState.turn' + onOff)});
-    }
-    if (App.isAuthorized("HOST.ADD_DELETE_HOSTS")) {
-      result.push({action: 'deleteHost', liClass:'', cssClass: 'icon-remove', 'label': this.t('hosts.host.details.deleteHost')});
-    }
-    return result;
   }.property('controller.content','isActive', 'controller.content.isNotHeartBeating'),
   didInsertElement: function() {
     var self = this;

+ 100 - 114
ambari-web/app/views/main/host/hosts_table_menu_view.js

@@ -99,68 +99,63 @@ App.HostTableMenuView = Em.View.extend({
 
     operationsInfo: function () {
       var content = this.get('content');
-      var menuItems = Em.A();
-      if (App.isAuthorized("SERVICE.START_STOP")) {
-        menuItems.pushObjects([
-          O.create({
-            label: Em.I18n.t('common.start'),
-            operationData: O.create({
-              action: App.HostComponentStatus.started,
-              message: Em.I18n.t('common.start'),
-              componentName: content.componentName,
-              serviceName: content.serviceName,
-              componentNameFormatted: content.componentNameFormatted
-            })
-          }),
-          O.create({
-            label: Em.I18n.t('common.stop'),
-            operationData: O.create({
-              action: App.HostComponentStatus.stopped,
-              message: Em.I18n.t('common.stop'),
-              componentName: content.componentName,
-              serviceName: content.serviceName,
-              componentNameFormatted: content.componentNameFormatted
-            })
-          }),
-          O.create({
-            label: Em.I18n.t('common.restart'),
-            operationData: O.create({
-              action: 'RESTART',
-              message: Em.I18n.t('common.restart'),
-              componentName: content.componentName,
-              serviceName: content.serviceName,
-              componentNameFormatted: content.componentNameFormatted
-            })
+      var menuItems = Em.A([
+        O.create({
+          label: Em.I18n.t('common.start'),
+          operationData: O.create({
+            action: App.HostComponentStatus.started,
+            message: Em.I18n.t('common.start'),
+            componentName: content.componentName,
+            serviceName: content.serviceName,
+            componentNameFormatted: content.componentNameFormatted
           })
-        ])
-      }
-      if (App.isAuthorized("SERVICE.DECOMMISSION_RECOMMISSION") && App.get('components.decommissionAllowed').contains(content.componentName)) {
-        menuItems.pushObjects([
-          O.create({
-            label: Em.I18n.t('common.decommission'),
-            decommission: true,
-            operationData: O.create({
-              action: 'DECOMMISSION',
-              message: Em.I18n.t('common.decommission'),
-              componentName: content.masterComponentName,
-              realComponentName: content.componentName,
-              serviceName: content.serviceName,
-              componentNameFormatted: content.componentNameFormatted
-            })
-          }),
-          O.create({
-            label: Em.I18n.t('common.recommission'),
-            decommission: true,
-            operationData: O.create({
-              action: 'DECOMMISSION_OFF',
-              message: Em.I18n.t('common.recommission'),
-              componentName: content.masterComponentName,
-              realComponentName: content.componentName,
-              serviceName: content.serviceName,
-              componentNameFormatted: content.componentNameFormatted
-            })
+        }),
+        O.create({
+          label: Em.I18n.t('common.stop'),
+          operationData: O.create({
+            action: App.HostComponentStatus.stopped,
+            message: Em.I18n.t('common.stop'),
+            componentName: content.componentName,
+            serviceName: content.serviceName,
+            componentNameFormatted: content.componentNameFormatted
+          })
+        }),
+        O.create({
+          label: Em.I18n.t('common.restart'),
+          operationData: O.create({
+            action: 'RESTART',
+            message: Em.I18n.t('common.restart'),
+            componentName: content.componentName,
+            serviceName: content.serviceName,
+            componentNameFormatted: content.componentNameFormatted
+          })
+        })
+      ]);
+      if (App.get('components.decommissionAllowed').contains(content.componentName)) {
+        menuItems.pushObject(O.create({
+          label: Em.I18n.t('common.decommission'),
+          decommission: true,
+          operationData: O.create({
+            action: 'DECOMMISSION',
+            message: Em.I18n.t('common.decommission'),
+            componentName: content.masterComponentName,
+            realComponentName: content.componentName,
+            serviceName: content.serviceName,
+            componentNameFormatted: content.componentNameFormatted
+          })
+        }));
+        menuItems.pushObject(O.create({
+          label: Em.I18n.t('common.recommission'),
+          decommission: true,
+          operationData: O.create({
+            action: 'DECOMMISSION_OFF',
+            message: Em.I18n.t('common.recommission'),
+            componentName: content.masterComponentName,
+            realComponentName: content.componentName,
+            serviceName: content.serviceName,
+            componentNameFormatted: content.componentNameFormatted
           })
-        ]);
+        }));
       }
       return menuItems;
     }.property("content"),
@@ -238,63 +233,54 @@ App.HostTableMenuView = Em.View.extend({
      * @returns {Array}
      */
     operationsInfo: function () {
-      var result = [];
-      if (App.isAuthorized("SERVICE.START_STOP")) {
-        result = result.concat([
-          O.create({
-            label: Em.I18n.t('hosts.host.details.startAllComponents'),
-            operationData: O.create({
-              action: 'STARTED',
-              actionToCheck: 'INSTALLED',
-              message: Em.I18n.t('hosts.host.details.startAllComponents')
-            })
-          }),
-          O.create({
-            label: Em.I18n.t('hosts.host.details.stopAllComponents'),
-            operationData: O.create({
-              action: 'INSTALLED',
-              actionToCheck: 'STARTED',
-              message: Em.I18n.t('hosts.host.details.stopAllComponents')
-            })
-          }),
-          O.create({
-            label: Em.I18n.t('hosts.table.menu.l2.restartAllComponents'),
-            operationData: O.create({
-              action: 'RESTART',
-              message: Em.I18n.t('hosts.table.menu.l2.restartAllComponents')
-            })
+      return [
+        O.create({
+          label: Em.I18n.t('hosts.host.details.startAllComponents'),
+          operationData: O.create({
+            action: 'STARTED',
+            actionToCheck: 'INSTALLED',
+            message: Em.I18n.t('hosts.host.details.startAllComponents')
           })
-        ]);
-      }
-
-      if (App.isAuthorized("HOST.TOGGLE_MAINTENANCE")) {
-        result = result.concat([
-          O.create({
-            label: Em.I18n.t('passiveState.turnOn'),
-            operationData: O.create({
-              state: 'ON',
-              action: 'PASSIVE_STATE',
-              message: Em.I18n.t('passiveState.turnOnFor').format('hosts')
-            })
-          }),
-          O.create({
-            label: Em.I18n.t('passiveState.turnOff'),
-            operationData: O.create({
-              state: 'OFF',
-              action: 'PASSIVE_STATE',
-              message: Em.I18n.t('passiveState.turnOffFor').format('hosts')
-            })
+        }),
+        O.create({
+          label: Em.I18n.t('hosts.host.details.stopAllComponents'),
+          operationData: O.create({
+            action: 'INSTALLED',
+            actionToCheck: 'STARTED',
+            message: Em.I18n.t('hosts.host.details.stopAllComponents')
+          })
+        }),
+        O.create({
+          label: Em.I18n.t('hosts.table.menu.l2.restartAllComponents'),
+          operationData: O.create({
+            action: 'RESTART',
+            message: Em.I18n.t('hosts.table.menu.l2.restartAllComponents')
+          })
+        }),
+        O.create({
+          label: Em.I18n.t('passiveState.turnOn'),
+          operationData: O.create({
+            state: 'ON',
+            action: 'PASSIVE_STATE',
+            message: Em.I18n.t('passiveState.turnOnFor').format('hosts')
+          })
+        }),
+        O.create({
+          label: Em.I18n.t('passiveState.turnOff'),
+          operationData: O.create({
+            state: 'OFF',
+            action: 'PASSIVE_STATE',
+            message: Em.I18n.t('passiveState.turnOffFor').format('hosts')
+          })
+        }),
+        O.create({
+          label: Em.I18n.t('hosts.host.details.setRackId'),
+          operationData: O.create({
+            action: 'SET_RACK_INFO',
+            message: Em.I18n.t('hosts.host.details.setRackId').format('hosts')
           })
-        ]);
-      }
-      result = result.concat(O.create({
-        label: Em.I18n.t('hosts.host.details.setRackId'),
-        operationData: O.create({
-          action: 'SET_RACK_INFO',
-          message: Em.I18n.t('hosts.host.details.setRackId').format('hosts')
         })
-      }));
-      return result;
+      ];
     }.property(),
 
     /**

+ 1 - 1
ambari-web/app/views/main/menu.js

@@ -42,7 +42,7 @@ App.MainMenuView = Em.CollectionView.extend({
           { label: Em.I18n.t('menu.item.hosts'), routing: 'hosts', hasAlertsLabel: true},
           { label: Em.I18n.t('menu.item.alerts'), routing: 'alerts'}
         );
-        if (App.isAuthorized('CLUSTER.TOGGLE_KERBEROS, CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+        if (App.isAccessible('upgrade_ADMIN')) {
           result.push({ label: Em.I18n.t('menu.item.admin'), routing: 'admin'});
         }
       }

+ 1 - 1
ambari-web/app/views/main/service/info/summary.js

@@ -462,7 +462,7 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, App.TimeRangeMixin
    */
   widgetActions: function() {
     var options = [];
-    if (App.isAuthorized('SERVICE.MODIFY_CONFIGS')) {
+    if (App.isAccessible('MANAGER')) {
       if (App.supports.customizedWidgetLayout) {
         options.pushObjects(this.get('staticWidgetLayoutActions'));
       }

+ 2 - 2
ambari-web/app/views/main/service/item.js

@@ -150,7 +150,7 @@ App.MainServiceItemView = Em.View.extend({
           disabled: App.allHostNames.length === App.HostComponent.find().filterProperty('componentName', master).mapProperty('hostName').length
         }));
       });
-      if (service.get('serviceTypes').contains('HA_MODE') && App.isAuthorized('SERVICE.ENABLE_HA')) {
+      if (service.get('serviceTypes').contains('HA_MODE')) {
         switch (service.get('serviceName')) {
           case 'HDFS':
             options.push(actionMap.TOGGLE_NN_HA);
@@ -249,7 +249,7 @@ App.MainServiceItemView = Em.View.extend({
   }.property('maintenance'),
 
   hasConfigTab: function() {
-    return App.isAuthorized('CLUSTER.VIEW_CONFIGS') && !App.get('services.noConfigTypes').contains(this.get('controller.content.serviceName'));
+    return !App.get('services.noConfigTypes').contains(this.get('controller.content.serviceName'));
   }.property('controller.content.serviceName','App.services.noConfigTypes'),
 
   hasHeatmapTab: function() {

+ 116 - 1
ambari-web/test/app_test.js

@@ -21,7 +21,6 @@ require('views/common/quick_view_link_view');
 require('models/host_component');
 require('models/stack_service_component');
 var modelSetup = require('test/init_model_test');
-App.auth = ["AMBARI.ADD_DELETE_CLUSTERS", "AMBARI.ASSIGN_ROLES", "AMBARI.EDIT_STACK_REPOS", "AMBARI.MANAGE_GROUPS", "AMBARI.MANAGE_STACK_VERSIONS", "AMBARI.MANAGE_USERS", "AMBARI.MANAGE_VIEWS", "AMBARI.RENAME_CLUSTER", "AMBARI.SET_SERVICE_USERS_GROUPS", "CLUSTER.TOGGLE_ALERTS", "CLUSTER.TOGGLE_KERBEROS", "CLUSTER.UPGRADE_DOWNGRADE_STACK", "CLUSTER.VIEW_ALERTS", "CLUSTER.VIEW_CONFIGS", "CLUSTER.VIEW_METRICS", "CLUSTER.VIEW_STACK_DETAILS", "CLUSTER.VIEW_STATUS_INFO", "HOST.ADD_DELETE_COMPONENTS", "HOST.ADD_DELETE_HOSTS", "HOST.TOGGLE_MAINTENANCE", "HOST.VIEW_CONFIGS", "HOST.VIEW_METRICS", "HOST.VIEW_STATUS_INFO", "SERVICE.ADD_DELETE_SERVICES", "SERVICE.COMPARE_CONFIGS", "SERVICE.DECOMMISSION_RECOMMISSION", "SERVICE.ENABLE_HA", "SERVICE.MANAGE_CONFIG_GROUPS", "SERVICE.MODIFY_CONFIGS", "SERVICE.MOVE", "SERVICE.RUN_CUSTOM_COMMAND", "SERVICE.RUN_SERVICE_CHECK", "SERVICE.START_STOP", "SERVICE.TOGGLE_ALERTS", "SERVICE.TOGGLE_MAINTENANCE", "SERVICE.VIEW_ALERTS", "SERVICE.VIEW_CONFIGS", "SERVICE.VIEW_METRICS", "SERVICE.VIEW_STATUS_INFO", "VIEW.USE"];
 
 describe('App', function () {
 
@@ -379,6 +378,122 @@ describe('App', function () {
     })
   });
 
+  describe("#isAccessible()", function() {
+
+    beforeEach(function () {
+      this.mock = sinon.stub(App.router, 'get');
+    });
+    afterEach(function () {
+      this.mock.restore();
+    });
+
+    it("Upgrade running, element should be blocked", function() {
+      App.set('upgradeState', "IN_PROGRESS");
+      App.set('isAdmin', true);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('ADMIN')).to.be.false;
+    });
+    it("Upgrade running, upgrade element should not be blocked", function() {
+      App.set('upgradeState', "IN_PROGRESS");
+      App.set('isAdmin', true);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('upgrade_ADMIN')).to.be.true;
+    });
+    it("Upgrade running, upgrade element should not be blocked", function() {
+      App.set('upgradeState', "IN_PROGRESS");
+      App.set('isAdmin', true);
+      App.set('supports.opsDuringRollingUpgrade', true);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('ADMIN')).to.be.true;
+      App.set('supports.opsDuringRollingUpgrade', false);
+    });
+    it("ADMIN type, isAdmin true", function() {
+      App.set('upgradeState', "INIT");
+      App.set('isAdmin', true);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('ADMIN')).to.be.true;
+    });
+    it("ADMIN type, isAdmin false", function() {
+      App.set('upgradeState', "INIT");
+      App.set('isAdmin', false);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('ADMIN')).to.be.false;
+    });
+    it("MANAGER type, isOperator false", function() {
+      App.set('upgradeState', "INIT");
+      App.set('isAdmin', true);
+      App.set('isOperator', false);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('MANAGER')).to.be.true;
+    });
+    it("MANAGER type, isAdmin false", function() {
+      App.set('upgradeState', "INIT");
+      App.set('isAdmin', false);
+      App.set('isOperator', true);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('MANAGER')).to.be.true;
+    });
+    it("MANAGER type, isAdmin and isOperator false", function() {
+      App.set('upgradeState', "INIT");
+      App.set('isAdmin', false);
+      App.set('isOperator', false);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('MANAGER')).to.be.false;
+    });
+    it("OPERATOR type, isOperator false", function() {
+      App.set('upgradeState', "INIT");
+      App.set('isOperator', false);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('OPERATOR')).to.be.false;
+    });
+    it("OPERATOR type, isOperator false", function() {
+      App.set('upgradeState', "INIT");
+      App.set('isOperator', true);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('OPERATOR')).to.be.true;
+    });
+    it("ONLY_ADMIN type, isAdmin false", function() {
+      App.set('upgradeState', "INIT");
+      App.set('isAdmin', false);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('ONLY_ADMIN')).to.be.false;
+    });
+    it("ONLY_ADMIN type, isAdmin true, isOperator false", function() {
+      App.set('upgradeState', "INIT");
+      App.set('isAdmin', true);
+      App.set('isOperator', false);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('ONLY_ADMIN')).to.be.true;
+    });
+    it("ONLY_ADMIN type, isAdmin true, isOperator true", function() {
+      App.set('upgradeState', "INIT");
+      App.set('isAdmin', true);
+      App.set('isOperator', true);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('ONLY_ADMIN')).to.be.false;
+    });
+    it("unknown type", function() {
+      App.set('upgradeState', "INIT");
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      expect(App.isAccessible('')).to.be.false;
+    });
+    it("ONLY_ADMIN type, isAdmin true, isOperator true, isSuspended true", function() {
+      App.set('upgradeState', "ABORTED");
+      App.set('isAdmin', true);
+      App.set('isOperator', false);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(false);
+      this.mock.withArgs('mainAdminStackAndUpgradeController.isSuspended').returns(true);
+      expect(App.isAccessible('ONLY_ADMIN')).to.be.true;
+    });
+    it("ONLY_ADMIN type, isNonWizardUser true", function() {
+      App.set('upgradeState', "ABORTED");
+      App.set('isAdmin', true);
+      App.set('isOperator', false);
+      this.mock.withArgs('wizardWatcherController.isNonWizardUser').returns(true);
+      expect(App.isAccessible('ONLY_ADMIN')).to.be.false;
+    });
+  });
+
   describe('#isHadoop20Stack', function () {
 
     Em.A([

+ 2 - 1
ambari-web/test/controllers/experimental_test.js

@@ -62,7 +62,8 @@ describe('App.ExperimentalController', function () {
     });
   });
 
-  describe.skip('#doSave', function () {
+  describe('#doSave', function () {
+
     before(function () {
       sinon.stub(Ember, 'set', function (p, v) {
         if (p.indexOf('App.supports.' != -1)) {

+ 1 - 2
ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js

@@ -20,8 +20,6 @@
 var App = require('app');
 require('controllers/main/admin/stack_and_upgrade_controller');
 require('utils/string_utils');
-App.auth = ["AMBARI.ADD_DELETE_CLUSTERS", "AMBARI.ASSIGN_ROLES", "AMBARI.EDIT_STACK_REPOS", "AMBARI.MANAGE_GROUPS", "AMBARI.MANAGE_STACK_VERSIONS", "AMBARI.MANAGE_USERS", "AMBARI.MANAGE_VIEWS", "AMBARI.RENAME_CLUSTER", "AMBARI.SET_SERVICE_USERS_GROUPS", "CLUSTER.TOGGLE_ALERTS", "CLUSTER.TOGGLE_KERBEROS", "CLUSTER.UPGRADE_DOWNGRADE_STACK", "CLUSTER.VIEW_ALERTS", "CLUSTER.VIEW_CONFIGS", "CLUSTER.VIEW_METRICS", "CLUSTER.VIEW_STACK_DETAILS", "CLUSTER.VIEW_STATUS_INFO", "HOST.ADD_DELETE_COMPONENTS", "HOST.ADD_DELETE_HOSTS", "HOST.TOGGLE_MAINTENANCE", "HOST.VIEW_CONFIGS", "HOST.VIEW_METRICS", "HOST.VIEW_STATUS_INFO", "SERVICE.ADD_DELETE_SERVICES", "SERVICE.COMPARE_CONFIGS", "SERVICE.DECOMMISSION_RECOMMISSION", "SERVICE.ENABLE_HA", "SERVICE.MANAGE_CONFIG_GROUPS", "SERVICE.MODIFY_CONFIGS", "SERVICE.MOVE", "SERVICE.RUN_CUSTOM_COMMAND", "SERVICE.RUN_SERVICE_CHECK", "SERVICE.START_STOP", "SERVICE.TOGGLE_ALERTS", "SERVICE.TOGGLE_MAINTENANCE", "SERVICE.VIEW_ALERTS", "SERVICE.VIEW_CONFIGS", "SERVICE.VIEW_METRICS", "SERVICE.VIEW_STATUS_INFO", "VIEW.USE"];
-
 
 describe('App.MainAdminStackAndUpgradeController', function() {
 
@@ -1097,6 +1095,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
       controller.saveRepoOS(Em.Object.create({repoVersionId: 1}), true);
       expect(controller.validateRepoVersions.calledWith(Em.Object.create({repoVersionId: 1}), true)).to.be.true;
       expect(controller.prepareRepoForSaving.calledWith(Em.Object.create({repoVersionId: 1}))).to.be.true;
+      expect(App.ajax.send.calledOnce).to.be.true;
     });
   });
 

+ 15 - 0
ambari-web/test/controllers/wizard/step7_test.js

@@ -1143,6 +1143,12 @@ describe('App.InstallerStep7Controller', function () {
   });
 
   describe('#_updateIsEditableFlagForConfig', function () {
+    beforeEach(function(){
+      this.mock = sinon.stub(App, 'isAccessible');
+    });
+    afterEach(function () {
+      this.mock.restore();
+    });
     Em.A([
         {
           isAdmin: false,
@@ -1175,9 +1181,18 @@ describe('App.InstallerStep7Controller', function () {
           defaultGroupSelected: false,
           m: 'false if defaultGroupSelected is false and isHostsConfigsPage is false',
           e: false
+        },
+        {
+          isAdmin: true,
+          isReconfigurable: true,
+          isHostsConfigsPage: false,
+          defaultGroupSelected: true,
+          m: 'equal to isReconfigurable if defaultGroupSelected is true and isHostsConfigsPage is false',
+          e: true
         }
       ]).forEach(function (test) {
         it(test.m, function () {
+          this.mock.returns(test.isAdmin);
           installerStep7Controller.reopen({isHostsConfigsPage: test.isHostsConfigsPage});
           var serviceConfigProperty = Em.Object.create({
             isReconfigurable: test.isReconfigurable

+ 4 - 4
ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js

@@ -56,13 +56,13 @@ describe('App.MainAdminStackServicesView', function () {
       sinon.stub(App.get('router'), 'transitionTo', Em.K);
       sinon.stub(App.router, 'get').returns(mock);
       sinon.spy(mock, 'checkAndStartKerberosWizard');
-      isAccessibleMock = sinon.stub(App, 'isAuthorized');
+      isAccessibleMock = sinon.stub(App, 'isAccessible');
     });
     afterEach(function() {
       App.get('router').transitionTo.restore();
       App.router.get.restore();
       mock.checkAndStartKerberosWizard.restore();
-      App.isAuthorized.restore();
+      App.isAccessible.restore();
     });
     it ("operations locked", function () {
       isAccessibleMock.returns(false);
@@ -92,11 +92,11 @@ describe('App.MainAdminStackServicesView', function () {
       isAccessibleMock;
 
     beforeEach(function() {
-      isAccessibleMock = sinon.stub(App, 'isAuthorized');
+      isAccessibleMock = sinon.stub(App, 'isAccessible');
     });
 
     afterEach(function() {
-      App.isAuthorized.restore();
+      App.isAccessible.restore();
     });
 
     cases.forEach(function (item) {

+ 10 - 10
ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js

@@ -360,13 +360,13 @@ describe('App.UpgradeVersionBoxView', function () {
           ]
         },
         setup: function () {
-          this.isAccessibleMock.withArgs('CLUSTER.UPGRADE_DOWNGRADE_STACK').returns(false);
+          this.isAccessibleMock.withArgs('ADMIN').returns(false);
         },
         expected: {
           status: 'INIT',
           isButton: true,
           buttons: [],
-          isDisabled: false
+          isDisabled: true
         },
         title: 'INIT state, no admin access, no requests in progress'
       },
@@ -381,7 +381,7 @@ describe('App.UpgradeVersionBoxView', function () {
           ]
         },
         setup: function () {
-          this.isAccessibleMock.withArgs('CLUSTER.UPGRADE_DOWNGRADE_STACK').returns(false);
+          this.isAccessibleMock.withArgs('ADMIN').returns(false);
         },
         expected: {
           status: 'INIT',
@@ -411,7 +411,7 @@ describe('App.UpgradeVersionBoxView', function () {
           'content.displayName': 'HDP-2.2.1'
         },
         setup: function () {
-          this.isAccessibleMock.withArgs('CLUSTER.UPGRADE_DOWNGRADE_STACK').returns(false);
+          this.isAccessibleMock.withArgs('ADMIN').returns(false);
         },
         expected: {
           status: 'INSTALL_FAILED',
@@ -447,7 +447,7 @@ describe('App.UpgradeVersionBoxView', function () {
           'content.displayName': 'HDP-2.2.1'
         },
         setup: function () {
-          this.isAccessibleMock.withArgs('CLUSTER.UPGRADE_DOWNGRADE_STACK').returns(false);
+          this.isAccessibleMock.withArgs('ADMIN').returns(false);
         },
         expected: {
           status: 'INSTALL_FAILED',
@@ -480,7 +480,7 @@ describe('App.UpgradeVersionBoxView', function () {
           'content.displayName': 'HDP-2.2.1'
         },
         setup: function () {
-          this.isAccessibleMock.withArgs('CLUSTER.UPGRADE_DOWNGRADE_STACK').returns(true);
+          this.isAccessibleMock.withArgs('ADMIN').returns(true);
         },
         expected: {
           status: 'OUT_OF_SYNC',
@@ -513,7 +513,7 @@ describe('App.UpgradeVersionBoxView', function () {
           'content.displayName': 'HDP-2.2.1'
         },
         setup: function () {
-          this.isAccessibleMock.withArgs('CLUSTER.UPGRADE_DOWNGRADE_STACK').returns(true);
+          this.isAccessibleMock.withArgs('ADMIN').returns(true);
         },
         expected: {
           status: 'OUT_OF_SYNC',
@@ -568,7 +568,7 @@ describe('App.UpgradeVersionBoxView', function () {
           'content.displayName': 'HDP-2.2.1'
         },
         setup: function () {
-          this.isAccessibleMock.withArgs('CLUSTER.UPGRADE_DOWNGRADE_STACK').returns(true);
+          this.isAccessibleMock.withArgs('ADMIN').returns(true);
         },
         expected: {
           status: 'INSTALLED',
@@ -604,7 +604,7 @@ describe('App.UpgradeVersionBoxView', function () {
           'content.displayName': 'HDP-2.2.0'
         },
         setup: function () {
-          this.isAccessibleMock.withArgs('CLUSTER.UPGRADE_DOWNGRADE_STACK').returns(true);
+          this.isAccessibleMock.withArgs('ADMIN').returns(true);
         },
         expected: {
           status: 'INSTALLED',
@@ -823,7 +823,7 @@ describe('App.UpgradeVersionBoxView', function () {
 
     beforeEach(function () {
       this.getMock = sinon.stub(App, 'get');
-      this.isAccessibleMock = sinon.stub(App, 'isAuthorized');
+      this.isAccessibleMock = sinon.stub(App, 'isAccessible');
     });
     afterEach(function () {
       this.getMock.restore();