blur-admin (lwazevedo) модуль аутентификации для подменю
Я использую RBAC в шаблоне blur-admin в angularjs. Там, где у меня следующий сценарий - предположим, у меня есть главное боковое меню под названием " Утилиты ", которое включает в себя 3 подменю. То есть, когда пользователь нажимает на Утилиты, он видит 3 подменю - 1) EDI Mapper 2) Inventory Mapper 3) Invoice Mapper
Мой 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
Администратор и пользователь-инвентарь. То есть меню Утилиты видны только администратору и пользователю-инвентарю, но не видны другим пользователям. Я хочу добиться того же для подменю, я реализовал ту же логику для подменю - Inventory Mapper следующим образом -
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 Mapper, а не два других подменю EDI Mapper & Invoice Mapper, но он видит их все.
Но в настоящее время все пользователи могут видеть все подменю в
Utilities
и хотите ограничить их только своим подменю. Другие подменю не должны быть доступны / видимы для них.
Короче говоря, ожидаемый результат для входа в систему пользователя-инвентаря -
1 ответ
Проблема была не полностью с модулями, просто добавили все роли в utilities.module.js, так как -
authRoles: ['admin', 'inventory-user', 'invoice-user', 'edi-user']
, И ссылаясь на это, обновилgetAuthorizedMenuItems()
в baSidebar.service.js следующим образом -
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);
};