我的路由文件锁定如下:
Router.map(function(){
this.route('gameSmall', {path: '/'});
this.route('gameMedium', {path: '/game-medium'});
this.route('gameLarge', {path: '/game-large'});
});
等
如果我想限制访问某些路径(仅限某些拥有密码的用户),我可以在路由器文件中配置它吗?或者只通过模板中的原生js?
答案 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'
});