$ state.target在promise

时间:2017-11-22 11:27:56

标签: javascript angularjs angular-ui-router

我有一个具有角色和权限的应用程序,根据该应用程序,用户可以在整个应用程序中导航。但是,我无法让$ 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.*。在此之后,国家不会被过境。

如果您对如何实现此目标有任何其他想法,请告诉我。

0 个答案:

没有答案