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

时间:2015-05-29 05:54:20

标签: meteor roles iron-router

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

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用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

请务必在“只有'或者'除了'在您的路线定义中:

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

答案 1 :(得分:1)

您可以将代码设置为稍微不同,以便更容易重复使用,并避免在路径之间复制和粘贴任何更改:

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();
  }
};

然后,只要你需要它,就把它放在旁边"之前:"

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