子菜单的blur-admin(lwazevedo)认证模块

时间:2017-10-03 05:57:57

标签: angularjs blur-admin

  

我在angularjs的blur-admin模板中使用RBAC。我在下面的场景中 - 假设,我有一个名为' Utilities 的主侧边菜单,其中包含3个子菜单。也就是说,当用户点击 实用工具 时,他会看到3个子菜单 - 1)EDI Mapper   2)库存映射器   3)发票映射器

menu structure

我的 utilities.module.js 是 -

(function() {
  'use strict';

  angular.module('BlurAdmin.pages.utilities', [
      'ui.select',
      'ngSanitize',
      'BlurAdmin.pages.utilities.ediMapper',
      'BlurAdmin.pages.utilities.inventoryMapper',
      'BlurAdmin.pages.utilities.invoiceMapper',
    ])
    .config(routeConfig);

  /** @ngInject */
  function routeConfig($stateProvider) {
    $stateProvider
      .state('main.utilities', {
        url: '/utilities',
        template: '<ui-view  autoscroll="true" autoscroll-body-top></ui-view>',
        abstract: true,
        title: 'Utilities',
        sidebarMeta: {
          icon: 'ion-hammer',
          order: 100,
        },
        authenticate: true,
        params: {
          authRoles: ['admin', 'inventory-user']
        }
      });
  }

})();
  

其中,authRoles admin&amp;库存用户。这就是 Utilities 菜单仅对 admin&amp; inventory-user ,但对任何其他用户都不可见。我想为子菜单实现相同的目标,我已经为子菜单实现了相同的逻辑 - 库存映射器 ,如下所示 -

inventoryMapper.module.js -

(function() {
  'use strict';

  angular.module('BlurAdmin.pages.utilities.inventoryMapper', ['angularFileUpload'])
    .config(routeConfig);

  /** @ngInject */
  function routeConfig($stateProvider) {
    $stateProvider
      .state('main.utilities.inventoryMapper', {
        url: '/inventoryMapper',
        templateUrl: 'app/pages/utilities/inventoryMapper/inventoryMapper.html',
        controller: 'inventoryMapperCtrl as vm',
        title: 'Inventory Mapper',
        sidebarMeta: {
          icon: 'ion-ios-pulse',
          order: 100,
        },
        authenticate: true,
        params: {
          authRoles: ['admin', 'inventory-user']
        }
      });
  }
})();

invoiceMapper.module.js -

(function() {
  'use strict';

  angular.module('BlurAdmin.pages.utilities.invoiceMapper', ['angularFileUpload'])
    .config(routeConfig);

  /** @ngInject */
  function routeConfig($stateProvider) {
    $stateProvider
      .state('main.utilities.invoiceMapper', {
        url: '/invoiceMapper',
        templateUrl: 'app/pages/utilities/invoiceMapper/invoiceMapper.html',
        controller: 'invoiceMapperCtrl as vm',
        title: 'Invoice Mapper',
        sidebarMeta: {
          icon: 'ion-ios-pulse',
          order: 100,
        },
        authenticate: true,
        params: {
          authRoles: ['admin', 'inventory-user']
        }
      });
  }
})();

&安培;类似于EDIMapper.module.js和authRoles: ['admin', 'edi-user']

  

现在,问题是当我使用 inventory-user 登录时,他应该只能看到 Utilities - &gt;库存映射器 而不是其他两个子菜单EDI Mapper&amp;实用程序下的Invoice Mapper,但他看到所有这些

     

目前,所有用户都能够看到 Utilities 下的所有子菜单,并且只想将它们限制在子菜单中。其他子菜单不应对他们可访问/可见。

简而言之,库存用户登录的 输出 是 - inventory-user sub-menu

发票用户登录的预期输出 是 - invoice-user sub-menu

1 个答案:

答案 0 :(得分:0)

  

问题不在于模块,只是将 utilities.module.js 中的所有角色添加为 - authRoles: ['admin', 'inventory-user', 'invoice-user', 'edi-user']。并referring this更新了 baSidebar.service.js 中的getAuthorizedMenuItems(),如下所示 -

this.getAuthorizedMenuItems = function(user) {
    var states = defineMenuItemStates();
    var menuItems = states.filter(function(item) {
        return item.level == 0 && _.includes(item.authRoles, user.role);
    });

    menuItems.forEach(function(item) {
        var children = states.filter(function(child) {
            // added this - _.includes(child.authRoles, user.role);, here level == 1 means submenus
            return child.level == 1 && child.name.indexOf(item.name) === 0 && _.includes(child.authRoles, user.role);
        });
        item.subMenu = children.length ? children : null;
    });

    return menuItems.concat(staticMenuItems);
};