我有一个具有角色和权限的应用程序,根据该应用程序,用户可以在整个应用程序中导航。但是,我无法让$ state.target在下面的代码中工作。请注意,UserService.getUserRole()
通过API从http获取数据并且是一个承诺。
我正在使用UI.Router
// States with authorization
$transitions.onStart({ to: statesWithAuth }, function(transition) {
let isBoss, isManager, isGrunt;
let nextState = transition.to().data;
let $state = transition.router.stateService;
if (AuthService.isLoggedIn()) {
UserService.getUserRole().then(function(user) {
if (user) {
isBoss = UserService.isBoss(user.roles);
isManager = UserService.isManager(user.roles);
isGrunt = UserService.isGrunt(user.roles);
}
// Grunt
if (isGrunt) {
if (!nextState.permissions.grunt) {
return $state.target("workdesk");
}
}
// Manager
if (isManager) {
if (!nextState.permissions.manager) {
return $state.target("workboard");
}
}
// Boss
if (isBoss) {
if (!nextState.permissions.boss) {
return $state.target("relaxingChair");
}
}
});
}
});
一切正常,直到!nextState.permissions.*
。在此之后,国家不会被过境。
如果您对如何实现此目标有任何其他想法,请告诉我。