如何通过流星应用程序中的铁路由器限制访问?

时间:2016-01-02 20:42:02

标签: mongodb meteor iron-router

我的路由文件锁定如下:

Router.map(function(){
    this.route('gameSmall', {path: '/'});
    this.route('gameMedium', {path: '/game-medium'});
    this.route('gameLarge', {path: '/game-large'});
});

如果我想限制访问某些路径(仅限某些拥有密码的用户),我可以在路由器文件中配置它吗?或者只通过模板中的原生js?

1 个答案:

答案 0 :(得分:1)

Iron Router不支持限制配置文件的访问。而是在js源中定义访问权限。 您可以限制全局和每条路由的路由访问。两者都使用onBeforeAction事件来评估对路径的访问。 onBeforeAction接受您编写访问规则的回调函数。

全局onBeforeAction事件可能如下所示:

Router.onBeforeAction(function() {
  if (!Meteor.isServer) {
      // Check the user. Whether logged in, but you could check user's roles as well.
      if (!Meteor.userId()) {
          this.render('pageNotFound'); // Current route cancelled -> render another page
      } else {
          this.next(); // Continue with the route -> will render the requested page
      }
  } 
}, 
{
    except: ['gameSmall']
});

注意第二个参数中的except字段。它包含要从onBeforeAction中排除的路径数组,因此始终会呈现这些路径。还有一个字段only相反,包括要由onBeforeAction评估的路由。

另请注意,我使用了模板pageNotFound(404页面)。您可以在IR的配置中定义该页面,如下所示:

Router.configure({
    notFoundTemplate: 'pageNotFound'
});