AngularJs和Angular-UI-Router路由权限

AngularJs and Angular-UI-Router routes permissions

我遇到了如何根据从服务器获取的远程数据实施路由限制的问题。

假设我有以下配置文件:

angular.module('myApp')
  .config(['$stateProvider', function($stateProvider) {

    $stateProvider
      .state('post', {
        url: '/post/:post_id',
        abstract: true,
        [...]
    })
      .state('post.view', {
        url: '/view'
        [...]
    })
      .state('post.edit', {
        url: '/edit'
        [...]
    })

}]);

我的申请要求是:

要做到这一点,最好的方法是什么?

我正在考虑有一个从服务器(post 的域和通信用户角色)获取数据的解决承诺,执行所需的检查并相应地 returns(承诺已解决或拒绝了)。

但是,如果他没有被授权,我如何将用户重定向到正确的状态?例如,一个试图访问 post.edit 状态的普通用户应该被重定向到 post.view 状态,如果 post 的域是 public... 但是如果post 的域是私有的,应显示未经授权的访问页面。直接在解决方案上执行此操作是一种好方法吗?有哪些替代方案?

看看这个关于基于角色的路由授权的很棒的教程:

role based authorization

也看看这个 Whosebug 答案,这里有基于登录的条件路由,你可以使用相同的角色逻辑来达到你的目的,

Ui-router, routes based on permission