我想根据用户角色限制对某些页面的访问。因此,我不希望登录用户能够在浏览器中更改URL以导航到他们无法访问的页面。所以对于这样的路线,我做了类似的事情:
action: function () {
if (!Roles.userIsInRole(Meteor.user(), 'admin')) {
this.render("AcressRestricted");
} else {
// Do routing for admin users here....
}
}
这是标准的方法吗?我是否需要将此代码添加到我想限制的每个页面中,或者是否有更通用的解决方案/捷径?
答案 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_one
和route_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
});
});