2012-05-29 147 views
0

我已经定义了使用骨干如何只允许

例如一组路线的具体途径获得:

Backbone.Routes.prefix = Onethingaday.Routers 
Backbone.Routes.map 

"!*splat": 
    "HomeRouter" : "reroute" 

"": 
    "NavbarRouter" : "index" 
    "SidebarRouter" : "index" 
    "HomeRouter" : "index" 

"all": 
    "NavbarRouter" : "index" 
    "SidebarRouter" : "index" 
    "HomeRouter" : "all" 

"news": 
    "NavbarRouter"  : "index" 
    "SidebarRouter"  : "index" 
    "NotificationsRouter" : "index" 

"popular/threads": 
    "NavbarRouter" : "index" 
    "SidebarRouter" : "index" 
    "DiscoverRouter" : "popularThreads" 

现在,我要限制访问某些路线,即只能够访问“所有'和'新闻'路线,如果用户'登录'。我怎样才能在这里做支票?如果用户试图访问“全部”和“新闻”页面,例如

回答

0

,我是否可以检查并比较并将用户重定向到单独的登录页面,具体取决于您如何存储当前用户的状态,无论是一个SessionControllerCurrentUser模型,你总是可以暴露一个方法沿currentUser.isLoggedIn()线。

我并不完全相信你的映射,如骨干只公开了路线单一深入的HashMap(你用别的东西都定义你的路线?)

在我的主干应用程序之一,我有一些代码是沿着以下线:

home: function homeFn() 
{ 
    if (this.app.currentUser.isAnonymous()) 
    { 
     this.app.page('index'); 
    } 
    else 
    { 
     this.app.page('dashboard'); 
    } 
} 

它可以让你直接控制在路由映射。如果你不喜欢这样,你总是可以扩展Backbone.Router对象以在过滤器之前/之后。在撰写本文时,this plugin是我以前使用过的,并且很好地帮助我完成了你想要达到的目标。

+0

嗨,谢谢你的回复。是的,我已经有一种方法来知道用户是否已登录,所以我可以检查用户的isLoggedIn。我不确定的是我如何区分“登录”用户和“非登录”用户的路线。例如,对于'新闻'路线,登录用户应该可以访问无问题,但对于未登录的用户,我想将他重定向到单独的登录页面。基本上,如果用户未登录,我打算对差异路由采取一些不同的操作,例如,新闻 - >去登录页面,流行 - 允许访问等 – Zhen