User Role Based Permission Extended to Sub Menu Level
- 主要语言
- JavaScript
- 星标
- 11.3k
- 派生
- 3k
- PR 合并指标
- 30 天内没有已合并 PR
描述
My code
**baSidebar.service.js**
(function() {
'use strict';
angular.module('BlurAdmin.theme.components')
.provider('baSidebarService', baSidebarServiceProvider);
/** @ngInject */
function baSidebarServiceProvider() {
var staticMenuItems = [];
this.addStaticItem = function() {
staticMenuItems.push.apply(staticMenuItems, arguments);
};
/** @ngInject */
this.$get = function($state, layoutSizes) {
return new _factory();
function _factory() {
var isMenuCollapsed = shouldMenuBeCollapsed();
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) {
//here assigning user roles to child node
var children = states.filter(function(child) {
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);
};
this.shouldMenuBeCollapsed = shouldMenuBeCollapsed;
this.canSidebarBeHidden = canSidebarBeHidden;
this.setMenuCollapsed = function(isCollapsed) {
isMenuCollapsed = isCollapsed;
};
this.isMenuCollapsed = function() {
return isMenuCollapsed;
};
this.toggleMenuCollapsed = function() {
isMenuCollapsed = !isMenuCollapsed;
};
this.getAllStateRefsRecursive = function(item) {
var result = [];
_iterateSubItems(item);
return result;
function _iterateSubItems(currentItem) {
currentItem.subMenu && currentItem.subMenu.forEach(function(subItem) {
subItem.stateRef && result.push(subItem.stateRef);
_iterateSubItems(subItem);
});
}
};
function defineMenuItemStates() {
return $state.get()
.filter(function(s) {
return s.sidebarMeta;
})
.map(function(s) {
var meta = s.sidebarMeta;
return {
name: s.name,
title: s.title,
level: (s.name.match(/\./g) || []).length,
order: meta.order,
icon: meta.icon,
stateRef: s.name,
authRoles: s.params ? s.params.authRoles : undefined
};
})
.sort(function(a, b) {
return (a.level - b.level) * 100 + a.order - b.order;
});
}
function shouldMenuBeCollapsed() {
return window.innerWidth <= layoutSizes.resWidthCollapseSidebar;
}
function canSidebarBeHidden() {
return window.innerWidth <= layoutSizes.resWidthHideSidebar;
}
}
};
}
})();
**BaSidebarCtrl.js**
/**
* @author v.lugovksy
* created on 16.12.2015
*/
(function () {
'use strict';
angular.module('BlurAdmin.theme.components')
.controller('BaSidebarCtrl', BaSidebarCtrl);
/** @ngInject */
function BaSidebarCtrl($scope, baSidebarService) {
//$scope.getCurrentUser(function(user){
// $scope.menuItems = baSidebarService.getAuthorizedMenuItems(user);
// $scope.defaultSidebarState = $scope.menuItems[0].stateRef;
//});
$scope.menuItems = baSidebarService.getAuthorizedMenuItems(user);
$scope.defaultSidebarState = $scope.menuItems[0].stateRef;
$scope.hoverItem = function ($event) {
$scope.showHoverElem = true;
$scope.hoverElemHeight = $event.currentTarget.clientHeight;
var menuTopValue = 66;
$scope.hoverElemTop = $event.currentTarget.getBoundingClientRect().top - menuTopValue;
};
$scope.$on('$stateChangeSuccess', function () {
if (baSidebarService.canSidebarBeHidden()) {
baSidebarService.setMenuCollapsed(true);
}
});
}
})();
**reports.module.js**
/**
* @author v.lugovsky
* created on 16.12.2015
*/
(function () {
'use strict';
angular.module('BlurAdmin.pages.reports', [])
.config(routeConfig);
/** @ngInject */
function routeConfig($stateProvider, $urlRouterProvider) {
$stateProvider
.state('reports', {
url: '/reports',
template : '',
abstract: true,
controller: 'ReportsPageCtrl',
title: 'Reports',
sidebarMeta: {
icon: 'ion-grid',
order: 300,
},
params: { //
authRoles: ['admin'] // roles here
}
}).state('reports.accountSummary', {
url: '/accountSummary',
templateUrl: 'app/pages/reports/accounts/accountSummary.html',
title: 'Account Summary',
sidebarMeta: {
order: 0,
},
params: { //
authRoles: ['admin'] // roles here
}
}).state('reports.soaTicketWise', {
url: '/soaTicketWise',
templateUrl: 'app/pages/reports/accounts/soaTicketWise.html',
title: 'SOA Ticket wise',
sidebarMeta: {
order: 100,
},
params: { //
authRoles: ['admin'] // roles here
}
});
$urlRouterProvider.when('/reports','/reports/accounts');
}
})();
**app.js**
'use strict';
angular.module('BlurAdmin', [
'ngAnimate',
'ui.bootstrap',
'ui.sortable',
'ui.router',
'ngTouch',
'toastr',
'smart-table',
"xeditable",
'ui.slimscroll',
'ngJsTree',
'angular-progress-button-styles',
'BlurAdmin.theme',
'BlurAdmin.pages'
]);
var user = {
userName: 'test@mail.com',
passWord: 'testpwd',
role: 'admin'
};
贡献指南
这个仓库没有索引到贡献指南
评估
这个 Issue 还没有评估数据。