Angularjs 用于子菜单的模糊管理(lwazevedo)身份验证模块

Angularjs 用于子菜单的模糊管理(lwazevedo)身份验证模块,angularjs,blur-admin,Angularjs,Blur Admin,我在angularjs的模糊管理模板中使用RBAC。在这里,我有以下场景-假设,我有一个名为“实用程序””的主菜单,其中包括3个子菜单。也就是说,当用户单击实用程序时,他将看到3个子菜单-1)EDI映射器 2) 库存映射器 3) 发票映射器 Myutilities.module.js是- invoiceMapper.module.js- &类似于EDIMapper.module.js,具有身份验证角色:['admin','edi user'] 现在,这里的问题是,当我使用库存用户登录时,他应该

我在angularjs的模糊管理模板中使用RBAC。在这里,我有以下场景-假设,我有一个名为“实用程序””的主菜单,其中包括3个子菜单。也就是说,当用户单击实用程序时,他将看到3个子菜单-1)EDI映射器 2) 库存映射器 3) 发票映射器

Myutilities.module.js是-

invoiceMapper.module.js-

&类似于EDIMapper.module.js,具有
身份验证角色:['admin','edi user']

现在,这里的问题是,当我使用库存用户登录时,他应该只能看到实用工具->库存映射器,而不能看到实用工具下的其他两个子菜单EDI映射器和发票映射器,但他可以看到所有这些子菜单

但是目前,所有用户都可以看到
实用程序下的所有子菜单,并且只想将它们限制在自己的子菜单中。其他子菜单不应可访问/可见。

简而言之,库存用户登录所需的输出是-

发票用户登录的预期输出为-

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

(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']
        }
      });
  }

})();
(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']
        }
      });
  }
})();
(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']
        }
      });
  }
})();
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);
};