0

我正在使用backbone.js 构建一个应用程序,并且想知道如何保护不同用户组的路由。

我已经看过许多带有一些简单身份验证方法的教程,但我没有找到任何有关用户组的信息。

假设我的应用程序有 2 个用户组:管理员(读/写)和访客(读)。如何使用backbone.js 设置安全身份验证系统,以使客人无法打开http://example.com/foo/1/edit

有任何想法吗?

4

2 回答 2

2

You can have a single router managing all the routes for you and then you can listen on the router's "all" event to see which route is the user trying to navigate to. Then, you can decide based on the user and route whether he be allowed to go there or not. Something like this might work :

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

一种选择是仅在用户在管理员组中时才设置路由。

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 回答