阻止用户导航到仅限于其角色的页面
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_one
和 route_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
});
});
我想根据用户角色限制对某些页面的访问。所以我不希望登录用户能够仅更改浏览器中的 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_one
和 route_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
});
});