サーバーから取得したリモートデータに基づいてルート制限を実装する方法に関する問題に直面しています。
次の設定ファイルがあるとします。
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
状態にリダイレクトされる必要があります...しかし、投稿のドメインがプライベートの場合、不正アクセスページは提示されます。これを直接解決するのは良いアプローチですか?代替案は何ですか?
役割に基づくルーティング承認に関するこの素晴らしいチュートリアルをご覧ください。
このスタックオーバーフローの回答もご覧ください。ログインに基づく条件付きルーティングがあり、目的に応じて同じ役割のロジックを使用できます。