akveo / akveo/blur-admin

User Role Based Permission Extended to Sub Menu Level

Aberta
#338 0 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
JavaScript
Estrelas
11.3k
Forks
3k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

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'
};

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.