2016-09-13 6 views
5

私は[email protected]にアップグレードし、必要な権限がない場合にユーザーを別の状態にリダイレクトする最良の方法を見つけようとしています。UI-Router 1.0はユーザーの役割に基づいてリダイレクトします

これは私が持っているものです。

.state('company_dashboard', { 
    url: '/dashboard', 
    templateUrl: 'dashboard.html', 
    controller: 'CompanyDashboardCtrl', 
    resolve: { 
     user: function(UserService) { 
      return UserService.getActiveUser(); 
     }, 
     company: function(UserService) { 
      return CompanyService.getActiveCompany(); 
     }, 
     permissions: function(CompanyService, user, company){ 
      return CompanyService.getUserPermissions(company, user); 
     } 
    }, 
    onEnter: function($state, permissions) { 
     if (permissions.canAccessDashboard === false) 
      return $state.go('company_landing_page'); 
    } 
}) 

上記の例は動作しますが、それは次のエラーログに記録:TransitionRejection(type: 2, message: The transition has been superseded by a different transition, detail: Transition#1(''{} -> 'company_landing_page'{}))私はと思わせる、より良い方法があるはず。

質問resolveの間に権限をチェックすることをお勧めしますか?

UPDATE:

$state.target()$state.go()を変更するには、コンソールエラーを取り除くために私を助けました。 This commentが助けてくれました。 質問は立てていますが、私はそれを正しい場所に行っていますか?

+0

私は春や何かのバックエンドフレームワークによって構築されたテンプレートのパーミッションをチェックするために使用されていました。フロントエンドに対するパーミッションのチェックは誰もがコードを見ることができるので良くないと思います。 –

答えて

1

私は次のようにあなたの状態にデータプロパティを追加します。

.state('company_dashboard', { 
    data: { 
      requiresAuthentication: true 
    } 
} 

をそして:

app.run(function ($rootScope, $state) { 
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams) { 
     // Check if user is authenticated 
     // And route requires authentication 
     if (!toState.data.requiresAuthentication) { 
      $state.go(toState.name, toParams); 
     } else if (user && toState.data.requiresAuthentication) { 
      $state.go(toState.name, toParams); 
     } else { 
      $state.go('login'); 
     } 
    }); 
}); 

をこれは、私はそれがより研磨することができると確信している場合でも、非常にうまく機能しているようです、しかし、これがあなたの進め方についてのアイデアを与えることを願っています。

関連する問題