akveo / akveo/blur-admin

User Role Based Permission Extended to Sub Menu Level

未关闭
#338 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
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 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。