阻止用户导航到仅限于其角色的页面

Stop users from navigating to a page that is restricted to their role

我想根据用户角色限制对某些页面的访问。所以我不希望登录用户能够仅更改浏览器中的 URL 以导航到他们不应该访问的页面。所以对于这样的路线,我正在做类似的事情:

action: function () {
    if (!Roles.userIsInRole(Meteor.user(), 'admin')) {
        this.render("AcressRestricted");
    } else {
        // Do routing for admin users here....
    }
}

这是标准的做法吗?我是否需要将此代码添加到我想要限制的每个页面,或者是否有更通用的解决方案/捷径?

您可以使用 Router.onBeforeAction:

Router.onBeforeAction(function() {
    if (!Roles.userIsInRole(Meteor.user(), 'admin')) {
        this.render("AcressRestricted");
    } else {
        this.next();
    }
}, {only : 'route_one', 'route_two'});

这仅适用于 route_oneroute_two

请务必在路由定义中命名您在 'only' 或 'except' 中使用的名称:

Router.route('/' {
    name: 'route_one',
    ...
});

您可以稍微不同地设置您的代码,以使其更容易重用,并避免必须跨路由复制和粘贴任何更改:

var adminFilter = function () {


if (Meteor.logginIn()) {
   //Logic for if they are an admin
    this.render('loading');
    this.stop();
  } else if (!user.admin()) {
    // Logic for if they are
    this.render('AcressRestricted');
    this.stop();
  }
};

然后当你需要它的时候,把它放在旁边 "before:"

Router.map(function () {
  this.route('adminPage', {
    path: '/admin',
    before: adminFilter
  });
});