2017-02-07 10 views
-1

私は、角度ui-routerをルーティングに使用しているangularJSアプリケーションを持っています。 AngularJSセキュリティとローカルストレージの追加Watch

は、私は次のセキュリティレベルを追加しましたが、それは私を助けていない:私は、ローカルストレージ内のトークンとユーザー役割を格納しています

  1. 。ユーザーの役割に基づいて 私はルートにユーザーをリダイレクトしています。

  2. 私はローカルストレージに時計サービスを適用しましたが、リフレッシュすると はローカルストレージの最後の(古い)値を取得しませんでした。この場合、私のチェック(ウォッチ)は失敗します。

  3. 誰かがローカルストレージと更新サイトでトークンを変更したとき。 私はトークンが変更されているかどうかを確認することができません。

  4. この場合、ユーザーはテンプレートを表示できますが、バックエンドにセキュリティレイヤーが追加されているため、データを取得できません。しかし、私もテンプレートへのアクセスを防ぐ必要があります。

これらの問題を解決するには、角度(クライアント)でセキュリティを追加することをお勧めします。

答えて

0

私が正しく理解していれば、必要な権限を持っていないユーザーにテンプレートが表示されないようにする方法を探しています。私がしたのは、ページを変更するときに、まずユーザーに正しい権限があるかどうかを確認することです。各状態で、私はページに到達するために必要な許可を追加します。

//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/

+0

私は同じことをやっています。ログイン後、私はユーザーの役割と一緒にlocalstorageにトークン(塩)を保存しています。 Admin/Userとuserrolesに応じて、私はログインしたユーザーが$ stateChangeStartのページを見ることを許可しています。誰かがlocalstorageに変更を加えて(ユーザを管理者に変更する)、ページを更新すると、管理者テンプレートが表示されます。この場合、localstorage watchサービスは機能しません。 – Akkism

+0

'変更する'とは、デバッガ?クライアントは定義上安全ではなく、これを防ぐことができません。私はあなたが正しいアクセス許可を持っている場合にのみページを返す何かをサーバー上に持たなければならないと信じています。上記の例では、テンプレートの代わりにtemplateUrlを使用し、その前にいくつかのアクセス権チェックを行います。 –

+0

私は基本的にlocalstorageにトークンとロールを格納しています。私はそれにウォッチャーサービスを適用しました。小切手をかけているローカルストアの役割によって異なります。ウォッチャーサービスは、誰かがローカルストレージを変更し、それを使用している場合(リフレッシュせずに)機能します。誰かがlocalstorage値を変更した後にページをリフレッシュすると、このウォッチャーサービスで定義されていない以前のlocalstorage値が表示されます。この問題を克服する必要があります。 – Akkism

関連する問題