web-dev-qa-db-ja.com

AngularJsおよびAngular-UI-Routerルートの権限

サーバーから取得したリモートデータに基づいてルート制限を実装する方法に関する問題に直面しています。

次の設定ファイルがあるとします。

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.viewに入ります)、公開されていない場合(ドメインが非公開)、所有者だけが投稿を表示できます。

  • post.edit状態には、所有者のみがアクセスできます。

これを行うための最善の方法は何ですか?

サーバー(投稿のドメインとコレスポンデントユーザーの役割)からデータをフェッチし、必要なチェックを実行して、それに応じて(プロミスの解決または拒否)解決のプロミスを考えていました。

しかし、ユーザーが承認されていない場合、ユーザーを正しい状態にリダイレクトするにはどうすればよいでしょうか。たとえば、投稿のドメインがパブリックの場合、post.edit状態にアクセスしようとする一般的なユーザーはpost.view状態にリダイレクトされる必要があります...しかし、投稿のドメインがプライベートの場合、不正アクセスページは提示されます。これを直接解決するのは良いアプローチですか?代替案は何ですか?

8
user3673649

役割に基づくルーティング承認に関するこの素晴らしいチュートリアルをご覧ください。

ロールベースの承認

このスタックオーバーフローの回答もご覧ください。ログインに基づく条件付きルーティングがあり、目的に応じて同じ役割のロジックを使用できます。

iルーター、許可に基づいてルーティング

8
ashfaq.p