0

我使用角度权限库。我在run()中定义了一些权限:

    PermPermissionStore
    .definePermission('isAuthorize', function () {
        console.log('isAuthorize', OAuth.isAuthenticated());
        return OAuth.isAuthenticated();
    });

然后我在我的 routes.js 中检查用户权限

            .state('app.main', {
            abstract: true,
            template: '<ui-view></ui-view>',
            data: {
                permissions: {
                    only: ['isAuthorize'],
                    redirectTo: {
                        default: 'login'
                    }
                }
            }
        })

但是我需要在每次刷新页面时首先询问 profileData,并且在我解决承诺后需要运行权限检查。我尝试像这样在父状态上添加解决方案,但它仍然首先要求 app.main 的许可,然后承诺正在解决。

            .state('app', {
            abstract: true,
            template: '<ui-view></ui-view>',
            controller: function ($rootScope, userData) {
                $rootScope.roles = userData.user.roles;
            },
            resolve: {
                userData: ["ProfileFactory", function (ProfileFactory) {
                    return ProfileFactory
                        .get()
                        .$promise;
                }]
            }
        })
4

1 回答 1

1

我没有使用角度权限模块。但是,如果您使用的是 ui.router,那么您自己就很容易实现。这是文档中的一个示例。

https://ui-router.github.io/docs/latest/classes/transition.transition-1.html#onbefore

onBefore 钩子的示例使用

  .run(($transitions, $state, $injector) => {
    $transitions.onBefore({
      to: 'app.**'
    }, () => {
      const $window = $injector.get('$window');
      if (!$window.sessionStorage.getItem('user')) {
        return $state.target('login', $state.transition.params());
      }
      return true
    });
  });

没有登录 test@gmail.com 和密码 123 你不能去主页

https://plnkr.co/edit/ZCN2hB34mMEmBJulyaAJ?p=preview

于 2016-11-28T03:22:35.447 回答