运行 Iron Router URL 特定部分的代码
Run code in specific part of URL in Iron Router
我有一个大量使用功能的应用程序,由具有不同角色的特定用户分隔。
问题是我想限制对某些模板的访问,例如,如果用户不是管理员。
目前,我有这个:
Router.route('createUser', {
path: '/admin/users/',
onBeforeAction: function() {
if(!isAdmin()) {
Router.go('/');
}
this.next();
}
});
但是,指定 if(isAdmin())
调用每条其他路由是一件很痛苦的事情。我想知道是否还有其他简单且不易出错的方法。
也许一些正则表达式魔术会起作用,但我似乎没有找到任何使用示例。
您可以将 onBeforeAction
挂钩与 only
结合用于所有路由,如下所示:
var isAdmin = function() {
// Whatever logic you have for checking admin
if (!admin) {
Router.go("/");
}
this.next();
}
Router.onBeforeAction(isAdmin, {
only: ["admin/users"] // Specify other admin templates here
});
首先,我建议您阅读meteor:common-mistakes 个人资料编辑部分
所以我会建议你更好地使用 alanningroles-meteor package。
超级好用,有疑惑这里Online DEMO and the Source Code
在路由器级别,您可以像这样创建一个 onBefore
挂钩。
isAdmin = function(){
var currentUser = Meteor.user()
isUserSuperAdmin = Roles.userIsInRole(currentUser,'Super-Admin'); //using alaning roles.
if(isUserSuperAdmin){ //or use isAdmin();
this.next();
}else{
this.render('accessDenied')
}
}
Router.onBeforeAction('accessDenied', {only: ['admin','otherAdminRoute',etc]});
我有一个大量使用功能的应用程序,由具有不同角色的特定用户分隔。
问题是我想限制对某些模板的访问,例如,如果用户不是管理员。
目前,我有这个:
Router.route('createUser', {
path: '/admin/users/',
onBeforeAction: function() {
if(!isAdmin()) {
Router.go('/');
}
this.next();
}
});
但是,指定 if(isAdmin())
调用每条其他路由是一件很痛苦的事情。我想知道是否还有其他简单且不易出错的方法。
也许一些正则表达式魔术会起作用,但我似乎没有找到任何使用示例。
您可以将 onBeforeAction
挂钩与 only
结合用于所有路由,如下所示:
var isAdmin = function() {
// Whatever logic you have for checking admin
if (!admin) {
Router.go("/");
}
this.next();
}
Router.onBeforeAction(isAdmin, {
only: ["admin/users"] // Specify other admin templates here
});
首先,我建议您阅读meteor:common-mistakes 个人资料编辑部分
所以我会建议你更好地使用 alanningroles-meteor package。
超级好用,有疑惑这里Online DEMO and the Source Code
在路由器级别,您可以像这样创建一个 onBefore
挂钩。
isAdmin = function(){
var currentUser = Meteor.user()
isUserSuperAdmin = Roles.userIsInRole(currentUser,'Super-Admin'); //using alaning roles.
if(isUserSuperAdmin){ //or use isAdmin();
this.next();
}else{
this.render('accessDenied')
}
}
Router.onBeforeAction('accessDenied', {only: ['admin','otherAdminRoute',etc]});