私が正しく理解していれば、必要な権限を持っていないユーザーにテンプレートが表示されないようにする方法を探しています。私がしたのは、ページを変更するときに、まずユーザーに正しい権限があるかどうかを確認することです。各状態で、私はページに到達するために必要な許可を追加します。
//these are the permissions the user currently has
var currentPermissions = {
"User.Read":true,
"User.Create":false
}
var app = angular.module('myApp', ['ui.router']);
app.config(function($stateProvider) {
$stateProvider.state('page1', {
url: "/page1",
data: {permission: "User.Read"}, //the perm required
template: "Page 1"
})
.state('page2', {
url: "/page2",
data: {permission: "User.Read"},
template: "Page 2"
})
.state('page3', {
url: "/page3",
data: {permission: "User.Create"},
template: "Page 3"
})
.state("noAccess", {
url:"/noAccess",
template: "access denied"
});
});
app.run(function($rootScope, $state) {
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
//check to make sure user has correct perm
if(toState.data && !currentPermissions[toState.data.permission]){
event.preventDefault();
$state.go('noAccess');//redirect if user does not have perm
}
});
});
でフィドル:https://jsfiddle.net/Darin_Cardin/mwg33rm4/
私は同じことをやっています。ログイン後、私はユーザーの役割と一緒にlocalstorageにトークン(塩)を保存しています。 Admin/Userとuserrolesに応じて、私はログインしたユーザーが$ stateChangeStartのページを見ることを許可しています。誰かがlocalstorageに変更を加えて(ユーザを管理者に変更する)、ページを更新すると、管理者テンプレートが表示されます。この場合、localstorage watchサービスは機能しません。 – Akkism
'変更する'とは、デバッガ?クライアントは定義上安全ではなく、これを防ぐことができません。私はあなたが正しいアクセス許可を持っている場合にのみページを返す何かをサーバー上に持たなければならないと信じています。上記の例では、テンプレートの代わりにtemplateUrlを使用し、その前にいくつかのアクセス権チェックを行います。 –
私は基本的にlocalstorageにトークンとロールを格納しています。私はそれにウォッチャーサービスを適用しました。小切手をかけているローカルストアの役割によって異なります。ウォッチャーサービスは、誰かがローカルストレージを変更し、それを使用している場合(リフレッシュせずに)機能します。誰かがlocalstorage値を変更した後にページをリフレッシュすると、このウォッチャーサービスで定義されていない以前のlocalstorage値が表示されます。この問題を克服する必要があります。 – Akkism