运行 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]});