我有一个应用程序,它大量使用由特定用户分隔的功能,这些功能具有不同的角色。
问题是我想限制对某些模板的访问,例如,如果用户不是管理员。
目前,我有这个:
Router.route('createUser', {
path: '/admin/users/',
onBeforeAction: function() {
if(!isAdmin()) {
Router.go('/');
}
this.next();
}
});
但是,指定if(isAdmin())
调用其他所有路径是一件痛苦的事。我想知道是否还有其他容易且不易出错的方法。
也许有一些正则表达式魔术会做,但我似乎没有找到任何使用的例子。
答案 0 :(得分:3)
首先,我建议您在个人资料编辑部分
上阅读此meteor:common-mistakes因此,我建议您更好地使用alanningroles-meteor package。
非常容易使用,如果您有疑问,可以使用Online DEMO和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]});
答案 1 :(得分:1)
对于所有路线,您可以将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
});