0

backbone.js を使用してアプリを構築していますが、さまざまなユーザー グループのルートを保護する方法を考えています。

簡単な認証方法を使った多くのチュートリアルを見てきましたが、ユーザー グループに関する情報が見つかりません。

アプリに管理者 (読み取り/書き込み) とゲスト (読み取り) の 2 つのユーザー グループがあるとします。ゲストがhttp://example.com/foo/1/editを開くことができないように、backbone.js を使用して安全な認証システムをセットアップするにはどうすればよいですか?

何か案は?

4

2 に答える 2

2

単一のルーターですべてのルートを管理し、ルーターの「all」イベントをリッスンして、ユーザーが移動しようとしているルートを確認できます。次に、ユーザーとルートに基づいて、そこに行くことを許可するかどうかを決定できます。このようなものがうまくいくかもしれません:

app.router.on("all",function(a){
    var routeRegex = /^route:(.*)$/g;
    var routeType = a.match(/route:(.*)$/)[1];

 if( routeType === "edit" && !app.isCurrentUserAllowedAdminAccess() ){
       //re-route the user to a different page
       app.router.navigate("user/access_denied", {trigger:true});
    }
}
于 2013-07-31T15:49:20.053 に答える
1

1 つのオプションは、ユーザーが管理者グループに属している場合にのみルートをセットアップすることです。

var router = new appRouter();

if (user.group === 'admin') {
  router.route('foo/:id/edit','edit',function {
    // your admin route logic here.
  });

  // or define the function in your router and reference it
  // such as: router.route('foo/:id/edit','edit',router.edit);
}

Backbone.history.start();

ルートがたくさんある場合は、次のような管理ルートを含むオブジェクトを作成できます: (ただし、ルート名のプロパティを追加したい場合があります)

var adminRoutes = {
  'foo/:id/edit':function() {
       // your logic here
   },
  'another/route': // same set-up as above
  ...
};

if次に、ループを使用して条件に設定します。

for (var k in adminRoutes)
  router.route(k,k,adminRoutes[k]);

とにかく、この方法にはいくつかの異なる設定オプションがあります。

このアプローチの利点は、ユーザーが移動する各ルートでルートとユーザーのアクセス許可を確認する必要がないことです。ルートが設定されているか、設定されていないかのどちらかです。

ユーザーが管理者権限にアップグレードできる場合は、ルート設定ロジックを関数にラップし、ユーザーに管理者アクセス権が付与されたときにそれを呼び出します。

これらすべてを除けば、私の知る限り、フロントエンドに安全な認証システムをセットアップすることはできません。決定するアプローチに関係なく、サーバー側のアクセス許可も確認する必要があります。

于 2013-08-01T04:39:00.427 に答える