2016-11-28 88 views
0

使用角度權限庫。我在跑定義的權限的一些():AngularJS授權,在角度權限之前解決承諾,檢查權限

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; 
       }] 
      } 
     }) 

回答

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 
    }); 
    }); 

沒有登錄爲[email protected]和密碼123,你不能去主頁

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

+0

它可以工作,但是當我試圖使用$轉換我收到「未知的提供者:$ transitionsProvider」 我也找到這個: https://github.com/angular-ui/ui-router/issues/2891 但我認爲必須有辦法做onBefore過渡莫名其妙。 –

+0

$ transitions需要ui-router1.0.0 –

+0

我假設你使用的是新版本的ui.router。對於舊版本,您可以執行如下操作:$ rootScope。$ on('$ stateChangeStart',(ev,toState,toStateParams)=> authService.authorize(ev,toState,toStateParams)); – fernando