Repository: ambari Updated Branches: refs/heads/trunk ca7b8fdb8 -> b68b716a5
AMBARI-8467 Ambari Web: Lock navigation down while upgrade is happening. (atkach) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b68b716a Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b68b716a Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b68b716a Branch: refs/heads/trunk Commit: b68b716a597e484958a8a5c8a18b00aa577befd9 Parents: ca7b8fd Author: Andrii Tkach <[email protected]> Authored: Fri Nov 28 12:14:37 2014 +0200 Committer: Andrii Tkach <[email protected]> Committed: Fri Nov 28 12:14:37 2014 +0200 ---------------------------------------------------------------------- ambari-web/app/app.js | 42 +++++++++++- ambari-web/app/controllers/application.js | 2 +- .../controllers/main/service/info/configs.js | 2 +- .../app/controllers/wizard/step7_controller.js | 2 +- ambari-web/app/mixins/common/userPref.js | 4 +- ambari-web/app/models/cluster_states.js | 4 +- ambari-web/app/router.js | 8 +-- .../app/routes/add_alert_definition_routes.js | 2 +- ambari-web/app/routes/add_service_routes.js | 2 +- ambari-web/app/routes/installer.js | 2 +- ambari-web/app/routes/main.js | 4 +- ambari-web/app/templates/application.hbs | 8 +-- .../common/configs/config_history_flow.hbs | 12 ++-- .../common/configs/overriddenProperty.hbs | 4 +- .../templates/common/configs/service_config.hbs | 4 +- .../common/configs/service_config_category.hbs | 12 ++-- .../common/configs/service_config_wizard.hbs | 4 +- .../common/configs/service_version_box.hbs | 4 +- .../app/templates/main/admin/security.hbs | 14 ++-- ambari-web/app/templates/main/host.hbs | 4 +- .../templates/main/host/bulk_operation_menu.hbs | 4 +- ambari-web/app/templates/main/host/details.hbs | 4 +- .../main/host/details/host_component.hbs | 8 +-- .../app/templates/main/host/stack_versions.hbs | 6 +- ambari-web/app/templates/main/host/summary.hbs | 12 ++-- .../app/templates/main/mirroring/datasets.hbs | 4 +- .../app/templates/main/mirroring/jobs.hbs | 4 +- .../main/service/all_services_actions.hbs | 4 +- .../app/templates/main/service/info/configs.hbs | 8 +-- .../app/templates/main/service/info/summary.hbs | 4 +- ambari-web/app/templates/main/service/item.hbs | 4 +- ambari-web/app/utils/helper.js | 7 ++ ambari-web/app/utils/host_progress_popup.js | 2 +- ambari-web/app/views/common/table_view.js | 4 +- ambari-web/app/views/main/menu.js | 2 +- .../app/views/main/mirroring/jobs_view.js | 2 +- ambari-web/test/app_test.js | 72 ++++++++++++++++++++ 37 files changed, 206 insertions(+), 85 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/app.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/app.js b/ambari-web/app/app.js index 20ad4ac..e866559 100644 --- a/ambari-web/app/app.js +++ b/ambari-web/app/app.js @@ -34,9 +34,45 @@ module.exports = Em.Application.create({ }), isAdmin: false, isOperator: false, - isManager: function() { - return this.get('isAdmin') || this.get('isOperator'); - }.property('isAdmin','isOperator'), + /** + * indicate whether stack upgrade is running or not + * @type {boolean} + */ + isUpgrading: false, + /** + * 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 (this.get('isUpgrading') && !type.contains('upgrade_')) { + return false; + } + + if (type.contains('upgrade_')) { + //slice off "upgrade_" prefix to have actual permission type + type = type.slice(8); + } + + switch (type) { + case '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, /** http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/controllers/application.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/application.js b/ambari-web/app/controllers/application.js index 87cc6b5..439e995 100644 --- a/ambari-web/app/controllers/application.js +++ b/ambari-web/app/controllers/application.js @@ -111,7 +111,7 @@ App.ApplicationController = Em.Controller.extend(App.UserPref, { showSettingsPopup: function() { // Settings only for admins - if (!App.get('isAdmin')) return; + if (!App.isAccessible('upgrade_ADMIN')) return; var self = this; var curValue = null; http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/controllers/main/service/info/configs.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/service/info/configs.js b/ambari-web/app/controllers/main/service/info/configs.js index baa158f..88fe2c7 100644 --- a/ambari-web/app/controllers/main/service/info/configs.js +++ b/ambari-web/app/controllers/main/service/info/configs.js @@ -1077,7 +1077,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM setEditability: function (serviceConfigProperty, defaultGroupSelected) { serviceConfigProperty.set('isEditable', false); if (serviceConfigProperty.get('isComparison')) return; - if (App.get('isAdmin') && defaultGroupSelected && !this.get('isHostsConfigsPage') && !serviceConfigProperty.get('group')) { + if (App.isAccessible('ADMIN') && defaultGroupSelected && !this.get('isHostsConfigsPage') && !serviceConfigProperty.get('group')) { serviceConfigProperty.set('isEditable', serviceConfigProperty.get('isReconfigurable')); } else if (serviceConfigProperty.get('group') && this.get('selectedConfigGroup.name') === serviceConfigProperty.get('group.name')) { serviceConfigProperty.set('isEditable', true); http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/controllers/wizard/step7_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/wizard/step7_controller.js b/ambari-web/app/controllers/wizard/step7_controller.js index aecaa9c..d004c05 100644 --- a/ambari-web/app/controllers/wizard/step7_controller.js +++ b/ambari-web/app/controllers/wizard/step7_controller.js @@ -435,7 +435,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, { * @method _updateIsEditableFlagForConfig */ _updateIsEditableFlagForConfig: function (serviceConfigProperty, defaultGroupSelected) { - if (App.get('isAdmin')) { + 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')) { http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/mixins/common/userPref.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mixins/common/userPref.js b/ambari-web/app/mixins/common/userPref.js index 78a2023..a82e014 100644 --- a/ambari-web/app/mixins/common/userPref.js +++ b/ambari-web/app/mixins/common/userPref.js @@ -80,9 +80,9 @@ App.UserPref = Em.Mixin.create({ * @param {Object} value */ postUserPref: function (key, value) { - if (!App.get('isAdmin')) { + if (!App.isAccessible('upgrade_ADMIN')) { return $.Deferred().reject().promise(); - }; + } var keyValuePair = {}; keyValuePair[key] = JSON.stringify(value); return App.ajax.send({ http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/models/cluster_states.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/cluster_states.js b/ambari-web/app/models/cluster_states.js index 95c1444..9571ea4 100644 --- a/ambari-web/app/models/cluster_states.js +++ b/ambari-web/app/models/cluster_states.js @@ -137,7 +137,7 @@ App.clusterStatus = Em.Object.create(App.UserPref, { if (response.localdb) { this.set('localdb', response.localdb); // restore HAWizard data if process was started - var isHAWizardStarted = App.get('isAdmin') && !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 : {}; App.db.data = response.localdb; @@ -190,7 +190,7 @@ App.clusterStatus = Em.Object.create(App.UserPref, { */ setClusterStatus: function (newValue, opt) { if (App.get('testMode')) return false; - if (!App.get('isAdmin')) { + if (!App.isAccessible('ADMIN')) { Em.assert('Non-Admin user should not execute setClusterStatus function', true); } var user = App.db.getUser(); http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/router.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/router.js b/ambari-web/app/router.js index bf27c7d..ed9d94b 100644 --- a/ambari-web/app/router.js +++ b/ambari-web/app/router.js @@ -485,7 +485,7 @@ App.Router = Em.Router.extend({ adminView: Em.Route.extend({ route: '/adminView', enter: function (router) { - if (!router.get('loggedIn') || !App.get('isAdmin') || App.get('isOperator')) { + if (!router.get('loggedIn') || !App.isAccessible('upgrade_ADMIN') || App.isAccessible('upgrade_OPERATOR')) { Em.run.next(function () { router.transitionTo('login'); }); @@ -498,7 +498,7 @@ App.Router = Em.Router.extend({ experimental: Em.Route.extend({ route: '/experimental', enter: function (router, context) { - if (App.get('isOperator')) { + if (App.isAccessible('upgrade_OPERATOR')) { Em.run.next(function () { if (router.get('clusterInstallCompleted')) { router.transitionTo("main.dashboard.widgets"); @@ -506,14 +506,14 @@ App.Router = Em.Router.extend({ router.route("installer"); } }); - } else if (!App.get('isAdmin')) { + } else if (!App.isAccessible('upgrade_ADMIN')) { Em.run.next(function () { router.transitionTo("main.views.index"); }); } }, connectOutlets: function (router, context) { - if (App.get('isAdmin') && !App.get('isOperator')) { + if (App.isAccessible('upgrade_ONLY_ADMIN')) { $('title').text(Em.I18n.t('app.name.subtitle.experimental')); console.log('/experimental:connectOutlet'); router.get('applicationController').connectOutlet('experimental'); http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/routes/add_alert_definition_routes.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/routes/add_alert_definition_routes.js b/ambari-web/app/routes/add_alert_definition_routes.js index 0b30340..a512b8c 100644 --- a/ambari-web/app/routes/add_alert_definition_routes.js +++ b/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.get('isAdmin')) { + if (App.isAccessible('ADMIN')) { Em.run.next(function () { var addAlertDefinitionController = router.get('addAlertDefinitionController'); App.router.get('updateController').set('isWorking', false); http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/routes/add_service_routes.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/routes/add_service_routes.js b/ambari-web/app/routes/add_service_routes.js index d0421a8..27ef5d4 100644 --- a/ambari-web/app/routes/add_service_routes.js +++ b/ambari-web/app/routes/add_service_routes.js @@ -23,7 +23,7 @@ module.exports = App.WizardRoute.extend({ enter: function (router) { console.log('in /service/add:enter'); - if (App.get('isAdmin')) { + if (App.isAccessible('ADMIN')) { Em.run.next(function () { var addServiceController = router.get('addServiceController'); App.router.get('updateController').set('isWorking', false); http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/routes/installer.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/routes/installer.js b/ambari-web/app/routes/installer.js index cab8c39..f403ed5 100644 --- a/ambari-web/app/routes/installer.js +++ b/ambari-web/app/routes/installer.js @@ -38,7 +38,7 @@ module.exports = Em.Route.extend({ $('title').text('Ambari - ' + name); App.router.get('mainViewsController').loadAmbariViews(); - if (App.get('isAdmin')) { + if (App.isAccessible('ADMIN')) { router.get('mainController').stopPolling(); console.log('In installer with successful authenticated'); console.log('current step=' + router.get('installerController.currentStep')); http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/routes/main.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js index 53f4140..16cf3f6 100644 --- a/ambari-web/app/routes/main.js +++ b/ambari-web/app/routes/main.js @@ -353,7 +353,7 @@ module.exports = Em.Route.extend({ admin: Em.Route.extend({ route: '/admin', enter: function (router, transition) { - if (router.get('loggedIn') && !App.get('isAdmin')) { + if (router.get('loggedIn') && !App.isAccessible('upgrade_ADMIN')) { Em.run.next(function () { router.transitionTo('main.dashboard.index'); }); @@ -361,7 +361,7 @@ module.exports = Em.Route.extend({ }, routePath: function (router, event) { - if (!App.isAdmin) { + if (!App.isAccessible('upgrade_ADMIN')) { Em.run.next(function () { App.router.transitionTo('main.dashboard.index'); }); http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/application.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/application.hbs b/ambari-web/app/templates/application.hbs index b931bb4..e7b62e1 100644 --- a/ambari-web/app/templates/application.hbs +++ b/ambari-web/app/templates/application.hbs @@ -57,13 +57,13 @@ </button> <ul class="dropdown-menu"> <li><a href="" {{action showAboutPopup target="controller"}}>{{t app.aboutAmbari}}</a></li> - {{#if App.isAdmin}}{{#unless App.isOperator}} + {{#isAccessible upgrade_ONLY_ADMIN}} <li><a href="" {{action goToAdminView target="controller"}}>{{t app.manageAmbari}}</a></li> - {{/unless}}{{/if}} + {{/isAccessible}} {{#if isClusterDataLoaded}} - {{#if App.isAdmin}} + {{#isAccessible upgrade_ADMIN}} <li><a href="" {{action showSettingsPopup target="controller"}}>{{t app.settings}}</a></li> - {{/if}} + {{/isAccessible}} {{/if}} <li class="break"></li> <li><a href="" {{action logoff}}>{{t app.signout}}</a></li> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/common/configs/config_history_flow.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/config_history_flow.hbs b/ambari-web/app/templates/common/configs/config_history_flow.hbs index 0ad38aa..5be8ce3 100644 --- a/ambari-web/app/templates/common/configs/config_history_flow.hbs +++ b/ambari-web/app/templates/common/configs/config_history_flow.hbs @@ -29,7 +29,7 @@ </div> <div class="version-info-bar-wrapper"> - {{#if App.isManager}} + {{#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> - {{/if}} + {{/isAccessible}} <div class="version-info-bar"> <div class="row-fluid"> <div class="btn-group pull-left"> @@ -78,10 +78,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> {{t common.view}}</button> - {{#if App.isManager}} + {{#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> {{t common.compare}}</button> <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor" title="serviceVersion.disabledActionMessages.revert"}} {{action doAction serviceVersion view.actionTypes.REVERT target="view"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button> - {{/if}} + {{/isAccessible}} </div> </ul> </li> @@ -107,7 +107,7 @@ <strong>{{view.displayedServiceVersion.author}}</strong> {{t dashboard.configHistory.info-bar.authoredOn}} <strong>{{view.displayedServiceVersion.createdDate}}</strong> {{/if}} </div> - {{#if App.isManager}} + {{#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> @@ -115,7 +115,7 @@ </div> <button class="btn btn-success" {{action doAction view.serviceVersionsReferences.displayed view.actionTypes.REVERT target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.displayedServiceVersion.isCurrent:hidden"}}>{{view.displayedServiceVersion.makeCurrentButtonText}}</button> </div> - {{/if}} + {{/isAccessible}} </div> </div> </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/common/configs/overriddenProperty.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/overriddenProperty.hbs b/ambari-web/app/templates/common/configs/overriddenProperty.hbs index fb438f3..d9d8dd2 100644 --- a/ambari-web/app/templates/common/configs/overriddenProperty.hbs +++ b/ambari-web/app/templates/common/configs/overriddenProperty.hbs @@ -42,13 +42,13 @@ <i class="icon-undo"></i> </a> {{/if}} - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} <a class="btn btn-small" href="#" data-toggle="tooltip" {{action "removeOverride" overriddenSCP target="view"}} {{translateAttr data-original-title="common.remove"}}> <i class="icon-minus-sign"></i> </a> - {{/if}} + {{/isAccessible}} <span class="help-inline">{{overriddenSCP.errorMessage}}</span> {{else}} <a class="action">{{overriddenSCP.group.switchGroupTextShort}}</a> <i class="icon-spinner"></i> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/common/configs/service_config.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/service_config.hbs b/ambari-web/app/templates/common/configs/service_config.hbs index aeae30f..04e42b2 100644 --- a/ambari-web/app/templates/common/configs/service_config.hbs +++ b/ambari-web/app/templates/common/configs/service_config.hbs @@ -64,13 +64,13 @@ {{/each}} </ul> </span> - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} {{#if controller.isHostsConfigsPage}} <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}} - {{/if}} + {{/isAccessible}} <div class="pull-right"> {{view App.FilterComboCleanableView filterBinding="view.filter" columnsBinding="view.columns" popoverDescriptionBinding="view.propertyFilterPopover"}} </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/common/configs/service_config_category.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/service_config_category.hbs b/ambari-web/app/templates/common/configs/service_config_category.hbs index 1ad4384..9a7a349 100644 --- a/ambari-web/app/templates/common/configs/service_config_category.hbs +++ b/ambari-web/app/templates/common/configs/service_config_category.hbs @@ -69,7 +69,7 @@ {{#if view.canEdit}} {{#if isPropertyOverridable}} {{#if view.supportsHostOverrides}} - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} {{#unless this.isComparison}} <a class="btn btn-small" href="#" data-toggle="tooltip" {{action "createOverrideProperty" this target="view"}} @@ -77,7 +77,7 @@ <i class="icon-plus-sign"></i> </a> {{/unless}} - {{/if}} + {{/isAccessible}} {{/if}} {{/if}} {{#unless cantBeUndone}} @@ -90,7 +90,7 @@ {{/if}} {{/unless}} {{#if isRemovable}} - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} {{#unless this.isComparison}} <a class="btn btn-small" href="#" data-toggle="tooltip" {{action "removeProperty" this target="view"}} @@ -98,7 +98,7 @@ <i class="icon-minus-sign"></i> </a> {{/unless}} - {{/if}} + {{/isAccessible}} {{/if}} {{#unless isEditable}} {{#if group}} @@ -125,7 +125,7 @@ {{/each}} {{! For Advanced, Advanced Core Site, Advanced HDFS Site sections, show the 'Add Property' link.}} - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} {{#if view.canEdit}} {{#if view.category.customCanAddProperty }} <div> @@ -133,7 +133,7 @@ </div> {{/if}} {{/if}} - {{/if}} + {{/isAccessible}} </form> </div> </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/common/configs/service_config_wizard.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/service_config_wizard.hbs b/ambari-web/app/templates/common/configs/service_config_wizard.hbs index 8bf7429..3b4cb5b 100644 --- a/ambari-web/app/templates/common/configs/service_config_wizard.hbs +++ b/ambari-web/app/templates/common/configs/service_config_wizard.hbs @@ -35,13 +35,13 @@ {{/each}} </ul> </span> - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} {{#if controller.isHostsConfigsPage}} <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}} - {{/if}} + {{/isAccessible}} <div class="pull-right"> {{view App.FilterComboCleanableView filterBinding="view.filter" columnsBinding="view.columns" popoverDescriptionBinding="view.propertyFilterPopover"}} </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/common/configs/service_version_box.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/service_version_box.hbs b/ambari-web/app/templates/common/configs/service_version_box.hbs index 749cb1d..3b4c490 100644 --- a/ambari-web/app/templates/common/configs/service_version_box.hbs +++ b/ambari-web/app/templates/common/configs/service_version_box.hbs @@ -43,10 +43,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.parentView"}}><i class="icon-search"></i> {{t common.view}}</button> - {{#if App.isManager}} + {{#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.parentView"}}><i class="icon-copy"></i> {{t common.compare}}</button> <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor" title="serviceVersion.disabledActionMessages.revert"}} {{action doAction serviceVersion view.actionTypes.REVERT target="view.parentView"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button> - {{/if}} + {{/isAccessible}} </div> </div> </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/admin/security.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/admin/security.hbs b/ambari-web/app/templates/main/admin/security.hbs index 56c75f7..8eb17ac 100644 --- a/ambari-web/app/templates/main/admin/security.hbs +++ b/ambari-web/app/templates/main/admin/security.hbs @@ -19,9 +19,10 @@ {{#if securityEnabled}} <div> <p class="text-success">{{t admin.security.enabled}} - <a - class="btn btn-padding btn-warning" {{bindAttr disabled="isSubmitDisabled"}} {{action notifySecurityOffPopup target="controller"}}>{{t admin.security.button.disable}} - </a> <br/> + {{#isAccessible ADMIN}} + <a class="btn btn-padding btn-warning" {{bindAttr disabled="isSubmitDisabled"}} {{action notifySecurityOffPopup target="controller"}}>{{t admin.security.button.disable}} + </a> <br/> + {{/isAccessible}} </p> </div> <div id="serviceConfig"> @@ -30,9 +31,10 @@ {{else}} <div> <p class="muted">{{t admin.security.disabled}} - <a - class="btn btn-padding btn-success" {{action addSecurity}}>{{t admin.security.button.enable}} - </a> <br/> + {{#isAccessible ADMIN}} + <a class="btn btn-padding btn-success" {{action addSecurity}}>{{t admin.security.button.enable}} + </a> <br/> + {{/isAccessible}} </p> </div> {{/if}} http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/host.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/host.hbs b/ambari-web/app/templates/main/host.hbs index a1907c3..be92027 100644 --- a/ambari-web/app/templates/main/host.hbs +++ b/ambari-web/app/templates/main/host.hbs @@ -20,9 +20,9 @@ <div class="box-header row"> <div class="hosts-actions pull-left"> - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} {{view App.HostTableMenuView}} - {{/if}} + {{/isAccessible}} </div> <div class="health-status-bar pull-left"> {{#view view.statusFilter categoriesBinding="view.categories"}} http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/host/bulk_operation_menu.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/host/bulk_operation_menu.hbs b/ambari-web/app/templates/main/host/bulk_operation_menu.hbs index eec06e4..eecb991 100644 --- a/ambari-web/app/templates/main/host/bulk_operation_menu.hbs +++ b/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"> - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} <li><a href="#" {{action addHost}}><i class="icon-plus icon-white"></i> {{t hosts.host.add}}</a></li> <li class="divider"></li> - {{/if}} + {{/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> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/host/details.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/host/details.hbs b/ambari-web/app/templates/main/host/details.hbs index 75df5d3..6059f79 100644 --- a/ambari-web/app/templates/main/host/details.hbs +++ b/ambari-web/app/templates/main/host/details.hbs @@ -34,7 +34,7 @@ class="icon-arrow-left"></i> {{t common.back}}</a></div> <div class="content"> {{view App.MainHostMenuView}} - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} <div class="service-button"> <div class="btn-group display-inline-block"> <a href="javascript:void(null)" {{bindAttr class=":btn :dropdown-toggle"}} data-toggle="dropdown"> @@ -67,7 +67,7 @@ </ul> </div> </div> - {{/if}} + {{/isAccessible}} {{outlet}} </div> </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/host/details/host_component.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/host/details/host_component.hbs b/ambari-web/app/templates/main/host/details/host_component.hbs index 0ed8379..1151493 100644 --- a/ambari-web/app/templates/main/host/details/host_component.hbs +++ b/ambari-web/app/templates/main/host/details/host_component.hbs @@ -18,11 +18,11 @@ <div class="span7"> {{#if view.isUpgradeFailed}} - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} <a href="#" {{action "upgradeComponent" view.content target="controller"}} > <i title="Component upgrade failed" class="components-health icon-arrow-up"></i> </a> - {{/if}} + {{/isAccessible}} {{else}} <span rel='componentHealthTooltip' {{bindAttr class="view.statusClass view.statusIconClass :components-health" data-original-title="view.componentTextStatus"}}></span> {{/if}} @@ -42,7 +42,7 @@ {{/unless}} </div> <div class="span5 pull-right"> - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} <div class="btn-group pull-right"> <a {{ bindAttr class="view.disabled :btn :dropdown-toggle"}} data-toggle="dropdown"> {{view.componentTextStatus}} @@ -140,5 +140,5 @@ {{/each}} </ul> </div> - {{/if}} + {{/isAccessible}} </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/host/stack_versions.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/host/stack_versions.hbs b/ambari-web/app/templates/main/host/stack_versions.hbs index 853b7b6..2c2988d 100644 --- a/ambari-web/app/templates/main/host/stack_versions.hbs +++ b/ambari-web/app/templates/main/host/stack_versions.hbs @@ -42,7 +42,11 @@ <span class="label label-success">{{t common.current}}</span> {{/if}} </td> - <td class="install-repo-version"><button class="btn" {{bindAttr disabled="this.installDisabled"}}><i class="icon-off"></i> {{t common.install}}</button></td> + <td class="install-repo-version"> + {{#isAccessible ADMIN}} + <button class="btn" {{bindAttr disabled="this.installDisabled"}}><i class="icon-off"></i> {{t common.install}}</button> + {{/isAccessible}} + </td> </tr> {{/each}} {{else}} http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/host/summary.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/host/summary.hbs b/ambari-web/app/templates/main/host/summary.hbs index ec585eb..377049d 100644 --- a/ambari-web/app/templates/main/host/summary.hbs +++ b/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;"> - {{#if App.isAdmin}} + {{#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> {{t add}} @@ -41,13 +41,13 @@ {{/each}} </ul> </div> - {{/if}} + {{/isAccessible}} </div> </div> <div class="host-components"> {{#if view.sortedComponents.length}} - {{#if App.isAdmin}} + {{#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}} - {{/if}} + {{/isAccessible}} {{#each component in view.sortedComponents}} <div class="row-fluid"> @@ -77,7 +77,7 @@ {{/if}} </div> <div class="span5 row"> - {{#if App.isAdmin}} + {{#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}} - {{/if}} + {{/isAccessible}} </div> </div> </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/mirroring/datasets.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/mirroring/datasets.hbs b/ambari-web/app/templates/main/mirroring/datasets.hbs index e8925d9..2ce1076 100644 --- a/ambari-web/app/templates/main/mirroring/datasets.hbs +++ b/ambari-web/app/templates/main/mirroring/datasets.hbs @@ -25,7 +25,7 @@ <div class="pull-left"> <h4>{{t mirroring.dataset.dataSets}}</h4> </div> - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} <div class="mirroring-top-nav pull-right btn-group"> <button {{bindAttr disabled="controller.actionsDisabled"}} class="btn">{{t common.actions}}</button> <button {{bindAttr disabled="controller.actionsDisabled"}} class="btn dropdown-toggle" data-toggle="dropdown"> @@ -44,7 +44,7 @@ </li> </ul> </div> - {{/if}} + {{/isAccessible}} </div> <table class="table advanced-header-table table-bordered dataset-thead"> <thead> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/mirroring/jobs.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/mirroring/jobs.hbs b/ambari-web/app/templates/main/mirroring/jobs.hbs index 9f8b845..194e17f 100644 --- a/ambari-web/app/templates/main/mirroring/jobs.hbs +++ b/ambari-web/app/templates/main/mirroring/jobs.hbs @@ -34,7 +34,7 @@ </tr> </table> </div> - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} <div class="top-right"> <div class="btn-group pull-right"> <button class="btn">{{t common.actions}}</button> @@ -78,7 +78,7 @@ <span {{bindAttr class=":label view.dataset.isRunning:label-info view.dataset.isSuspended:label-warning view.dataset.isSubmitted:label-success :pull-right :dataset-status"}}> {{view.dataset.statusFormatted}}</span> </div> - {{/if}} + {{/isAccessible}} <div class="bottom-right">{{t common.download}}: <a href="javascript:void(null);" {{action downloadEntity target="controller"}}>{{t mirroring.dataset.entity}}.xml</a></div> </div> {{/if}} http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/service/all_services_actions.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/service/all_services_actions.hbs b/ambari-web/app/templates/main/service/all_services_actions.hbs index d17b519..acbe692 100644 --- a/ambari-web/app/templates/main/service/all_services_actions.hbs +++ b/ambari-web/app/templates/main/service/all_services_actions.hbs @@ -16,7 +16,7 @@ * limitations under the License. }} -{{#if App.isAdmin}} +{{#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}} @@ -49,4 +49,4 @@ </ul> </div> </div> -{{/if}} +{{/isAccessible}} http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/service/info/configs.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/service/info/configs.hbs b/ambari-web/app/templates/main/service/info/configs.hbs index 267cd99..205ae0e 100644 --- a/ambari-web/app/templates/main/service/info/configs.hbs +++ b/ambari-web/app/templates/main/service/info/configs.hbs @@ -19,7 +19,7 @@ <div id="serviceConfig"> {{#if dataIsLoaded}} {{#if controller.content.isRestartRequired}} - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} <div> <div class="alert alert-warning clearfix"> <i class="icon-refresh"></i> {{t services.service.config.restartService.needToRestart}} <a @@ -45,11 +45,11 @@ </div> </div> </div> - {{/if}} + {{/isAccessible}} {{/if}} <div class="clearfix"></div> {{view App.ServiceConfigView filterBinding="controller.filter" columnsBinding="controller.filterColumns" canEditBinding="controller.isCurrentSelected" showConfigHistoryFeatureBinding="controller.showConfigHistoryFeature"}} - {{#if App.isAdmin}} + {{#isAccessible ADMIN}} {{#unless showConfigHistoryFeature}} <p class="pull-right"> <!--<input class="btn btn-primary" type="button" value="Save" {{!bindAttr disabled="isSubmitDisabled"}} />--> @@ -58,7 +58,7 @@ {{action restartServicePopup target="controller"}}>{{t common.save}}</a> </p> {{/unless}} - {{/if}} + {{/isAccessible}} {{else}} <div class="spinner"></div> {{/if}} http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/service/info/summary.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/service/info/summary.hbs b/ambari-web/app/templates/main/service/info/summary.hbs index bbf270f..1d28340 100644 --- a/ambari-web/app/templates/main/service/info/summary.hbs +++ b/ambari-web/app/templates/main/service/info/summary.hbs @@ -17,7 +17,7 @@ }} {{#if view.service.isRestartRequired}} - {{#if App.isAdmin}} + {{#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}} @@ -41,7 +41,7 @@ </div> </div> </div> - {{/if}} + {{/isAccessible}} {{/if}} <div class="row-fluid service-block"> http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/templates/main/service/item.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/service/item.hbs b/ambari-web/app/templates/main/service/item.hbs index a264f5f..d0c4c83 100644 --- a/ambari-web/app/templates/main/service/item.hbs +++ b/ambari-web/app/templates/main/service/item.hbs @@ -52,7 +52,7 @@ {{/if}} </div> -{{#if App.isAdmin}} +{{#isAccessible ADMIN}} <div class="service-button"> {{#if view.isMaintenanceActive}} <div class="btn-group display-inline-block"> @@ -105,5 +105,5 @@ </div> {{/if}} </div> -{{/if}} +{{/isAccessible}} {{outlet}} http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/utils/helper.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/helper.js b/ambari-web/app/utils/helper.js index 27efd87..a58b732 100644 --- a/ambari-web/app/utils/helper.js +++ b/ambari-web/app/utils/helper.js @@ -254,6 +254,13 @@ Em.Handlebars.registerHelper('highlight', function (property, words, fn) { return new Em.Handlebars.SafeString(property); }); + +Em.Handlebars.registerHelper('isAccessible', function (context, options) { + if (App.isAccessible(context)) { + return options.fn(this); + } +}); + /** * @namespace App */ http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/utils/host_progress_popup.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/host_progress_popup.js b/ambari-web/app/utils/host_progress_popup.js index e089f57..8088a1a 100644 --- a/ambari-web/app/utils/host_progress_popup.js +++ b/ambari-web/app/utils/host_progress_popup.js @@ -357,7 +357,7 @@ App.HostPopup = Em.Object.create({ updatedService = this.createService(service); servicesInfo.insertAt(index, updatedService); } - updatedService.set('isAbortable', App.get('isManager') && this.isAbortableByStatus(service.status)); + updatedService.set('isAbortable', App.isAccessible('MANAGER') && this.isAbortableByStatus(service.status)); }, this); this.removeOldServices(servicesInfo, currentServices); this.setBackgroundOperationHeader(isServiceListHidden); http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/views/common/table_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/table_view.js b/ambari-web/app/views/common/table_view.js index 207782a..b36dc0b 100644 --- a/ambari-web/app/views/common/table_view.js +++ b/ambari-web/app/views/common/table_view.js @@ -164,7 +164,7 @@ App.TableView = Em.View.extend(App.UserPref, { console.log('Persist did NOT find the key'); var displayLengthDefault = this.get('defaultDisplayLength'); this.set('displayLength', displayLengthDefault); - if (App.get('isAdmin')) { + if (App.isAccessible('upgrade_ADMIN')) { this.saveDisplayLength(); } this.filter(); @@ -372,7 +372,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.get('isAdmin')) { + if (App.isAccessible('upgrade_ADMIN')) { self.postUserPref(self.displayLengthKey(), self.get('displayLength')); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/views/main/menu.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/menu.js b/ambari-web/app/views/main/menu.js index cb708d1..1df8379 100644 --- a/ambari-web/app/views/main/menu.js +++ b/ambari-web/app/views/main/menu.js @@ -50,7 +50,7 @@ App.MainMenuView = Em.CollectionView.extend({ result.push({ label: Em.I18n.t('menu.item.jobs'), routing: 'apps'}); } - if (App.get('isAdmin')) { + if (App.isAccessible('upgrade_ADMIN')) { result.push({ label: Em.I18n.t('menu.item.admin'), routing: 'admin'}); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/app/views/main/mirroring/jobs_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/mirroring/jobs_view.js b/ambari-web/app/views/main/mirroring/jobs_view.js index 2e657f4..9c0031d 100644 --- a/ambari-web/app/views/main/mirroring/jobs_view.js +++ b/ambari-web/app/views/main/mirroring/jobs_view.js @@ -202,7 +202,7 @@ App.MainDatasetJobsView = App.TableView.extend({ tagName: 'tr', showActions: function () { - return ['RUNNING', 'SUSPENDED'].contains(this.get('content.status')) && App.get('isAdmin'); + return ['RUNNING', 'SUSPENDED'].contains(this.get('content.status')) && App.isAccessible('ADMIN'); }.property('content.status') }), http://git-wip-us.apache.org/repos/asf/ambari/blob/b68b716a/ambari-web/test/app_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/app_test.js b/ambari-web/test/app_test.js index 80b71a5..40cc6b4 100644 --- a/ambari-web/test/app_test.js +++ b/ambari-web/test/app_test.js @@ -461,4 +461,76 @@ describe('App', function () { }) }) }); + + describe("#isAccessible()", function() { + it("Upgrade running, element should be blocked", function() { + App.set('isUpgrading', true); + App.set('isAdmin', true); + expect(App.isAccessible('ADMIN')).to.be.false; + }); + it("Upgrade running, upgrade element should not be blocked", function() { + App.set('isUpgrading', true); + App.set('isAdmin', true); + expect(App.isAccessible('upgrade_ADMIN')).to.be.true; + }); + it("ADMIN type, isAdmin true", function() { + App.set('isUpgrading', false); + App.set('isAdmin', true); + expect(App.isAccessible('ADMIN')).to.be.true; + }); + it("ADMIN type, isAdmin false", function() { + App.set('isUpgrading', false); + App.set('isAdmin', false); + expect(App.isAccessible('ADMIN')).to.be.false; + }); + it("MANAGER type, isOperator false", function() { + App.set('isUpgrading', false); + App.set('isAdmin', true); + App.set('isOperator', false); + expect(App.isAccessible('MANAGER')).to.be.true; + }); + it("MANAGER type, isAdmin false", function() { + App.set('isUpgrading', false); + App.set('isAdmin', false); + App.set('isOperator', true); + expect(App.isAccessible('MANAGER')).to.be.true; + }); + it("MANAGER type, isAdmin and isOperator false", function() { + App.set('isUpgrading', false); + App.set('isAdmin', false); + App.set('isOperator', false); + expect(App.isAccessible('MANAGER')).to.be.false; + }); + it("OPERATOR type, isOperator false", function() { + App.set('isUpgrading', false); + App.set('isOperator', false); + expect(App.isAccessible('OPERATOR')).to.be.false; + }); + it("OPERATOR type, isOperator false", function() { + App.set('isUpgrading', false); + App.set('isOperator', true); + expect(App.isAccessible('OPERATOR')).to.be.true; + }); + it("ONLY_ADMIN type, isAdmin false", function() { + App.set('isUpgrading', false); + App.set('isAdmin', false); + expect(App.isAccessible('ONLY_ADMIN')).to.be.false; + }); + it("ONLY_ADMIN type, isAdmin true, isOperator false", function() { + App.set('isUpgrading', false); + App.set('isAdmin', true); + App.set('isOperator', false); + expect(App.isAccessible('ONLY_ADMIN')).to.be.true; + }); + it("ONLY_ADMIN type, isAdmin true, isOperator true", function() { + App.set('isUpgrading', false); + App.set('isAdmin', true); + App.set('isOperator', true); + expect(App.isAccessible('ONLY_ADMIN')).to.be.false; + }); + it("unknown type", function() { + App.set('isUpgrading', false); + expect(App.isAccessible('')).to.be.false; + }); + }); });
