目前能找到的权限控制都是通过resolve解决的,但需要每个controller都写相关的代码。网上找了一些资料,通过$routeChangeStart和$routeChangeSuccess实现url切换控制和权限控制。
- 首先定义不需要管理员的url数组和判断是否为此类url的方法
var frontUrls = ['/statisticsIndex', '/statisticsDetail'];
window.isFront = function (currentPath) {
var front = false;
for (var i = 0; i < frontUrls.length; i++) {
var frontUrl = frontUrls[i];
if (currentPath.indexOf(frontUrl) > -1) {
front = true;
break;
}
}
return front;
}
- $rootScope增加$routeChangeStart的监听方法。 如果要访问的url需要管理员权限,那么再判断当前用户是否有管理员权限,如果没有则提示用户并刷新页面到主页,否则就到相应的页面
$rootScope.$on('$routeChangeStart', function () {
var front = isFront($location.path());
if (!front) {
var canManager = ichsonService.canManager();
if (!canManager) {
alert("您没有权限访问当前页面!");
window.location.reload();
}
}
});
这种方式,相对resolve,涉及的js文件改动会少很多,只需要增加frontUrls中的值就可以适应增加url的场景。