2013-07-31 19 views
0

我正在用backbone.js構建一個應用程序,並好奇如何保護不同用戶組的路由。如何保護不同用戶組的路由

我見過很多使用一些簡單認證方法的教程,但是我沒有找到任何有關用戶組的信息。

比方說,我有2個用戶組爲我的應用程序:管理員(讀/寫)和客人(讀)。我如何使用backbone.js設置安全認證系統,以便客人無法打開http://example.com/foo/1/edit

任何想法?

回答

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]); 

反正有使用這種方法的幾個不同的設置選項。

這種方法的優點是您不必檢查用戶導航到的每條路線的路線和用戶權限。路線可以設置,也可以不設置。

如果您的用戶有能力升級到管理員權限,則將路由設置邏輯封裝在函數中,並在用戶被授予管理訪問權時調用它。

除此之外,就我所知,無法在前端設置安全的身份驗證系統。無論您選擇何種方法,您還必須檢查服務器端的權限。

2

您可以讓一個路由器爲您管理所有路由,然後您可以在路由器的「全部」事件上監聽用戶嘗試導航到的路由。然後,您可以根據用戶和路線決定是否允許他去那裏。像這樣的東西可能會工作:

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}); 
    } 
} 
+0

好主意!我今晚要測試它 – Slevin