我的角度应用中有一个部分要求用户登录并具有一定的级别或权限(编辑500,管理员1000)
这些要求是在状态配置中写的,如下所示:
.state('posts.edit', {
url: '/edit/{id:int}',
resolve: {
post: ['$stateParams', 'Post', function($stateParams, Post){
return Post.findOne($stateParams.id);
}]
},
controller: 'postEditCtrl',
templateUrl: '/partials/posts/edit.html',
requiresRight: 500
})
.state('admin',{
url: '/admin',
controller: 'adminCtrl',
templateUrl: '/partials/admin/dashboard.html',
requiresRight: 1000
});
然后,在我的.run中,我有$ stateChangeStart的事件监听器,如果用户未被授权,它应该阻止状态关闭。 代码:
site.run(["$rootScope", "$timeout", "$state", function($rootScope, $timeout, $state){
$rootScope.state = {
user: false
}
$rootScope.isAdmin = function(){
if($rootScope.state.user && $rootScope.state.user.rights >= 1000){
return true
}
else return false;
}
$rootScope.isEditor = function(){
if($rootScope.state.user && $rootScope.state.user.rights >= 500){
return true
}
else return false;
}
$rootScope.$on('$stateChangeStart', function(event, toState){
if(toState.requiresRight){
if(!$rootScope.state.user || toState.requiresRight > $rootScope.state.user.rights){
console.log("needed",toState.requiresRight)
console.log("have", $rootScope.state.user?$rootScope.state.user.rights:false);
event.preventDefault();
// $state.go("login");
}
}
})
}])
但是,当我测试时,我的状态更改并未被拒绝,但我得到一个空视图。另外我的侧边栏按钮包含ng-if(注销,管理链接),显示几毫秒。
我在一个plunkr中尝试过,但无法复制它:link