2013-11-14 153 views
1

我正在编写一个流星应用程序,并且已经习惯了新的铁路路由器软件包(与之前使用的路由器软件包相反)。铁路由器路由允许/拒绝

我有一个只能由具有特定属性的用户访问的路由集合。具体来说,我使用的是角色包。我目前实现这一目标的方法是定义一个运行条件的before函数,如果用户没有适当的角色,则会重定向到登录或错误页面。这里只是一个快速(咖啡脚本)的例子:

this.route 'home', 
    path: '/' 
    template: 'dashboard' 
    before: -> 
     unless Meteor.userId() 
     this.redirect 'userUnauthorized' 
     do this.stop 

我的问题是,有没有更好的方法来做到这一点?似乎应该有一些方法来添加权限集,并将该权限集应用于路由,而不是为每条路由编写访问条件。

回答

1

您可以在您的路线中设置一个全局“之前”。我没有使用的角色在我目前的应用程序,但我们在全球范围内基于他们是否被签署重定向用户

你也许可以做这样的事情:

Router.before(function() { 
    unless(Meteor.userId()) { 
    this.redirect('userUnauthorized'); 
    do (this.stop) 
    } 
}, {except: ['userUnauthorized', 'otherPageUnauthorizedUsersAllowedToSee']}); 

我们使用类似的东西就在我们的下方Router.configure()

+0

嗨斯宾塞。你的方法是否安全?我的意思是,路由器在客户端上可用。 –

+2

无论是否重定向,您都无法阻止用户看到您发送给客户端的任何模板。正如你所说,路由器可以在客户端上使用,据我所知,路由更像是UI/UX类型的东西。 您可以并且应该做的是确保您不会向用户发送任何收集或数据,而这些用户不应该看到它们,并且您可以执行此操作。如果您将敏感数据嵌入到视图模板中,则会出现问题。最终,用户可以访问我们应用的任何页面。该页面上呈现的内容基于该用户的角色/权限。 – Spencer