Iron Router代码的位置

Location of Iron Router Code

我想确认我将 Iron Router 代码放置在正确的位置。现在我把它存储在 lib/router.js 中,这意味着代码在客户端和服务器上共享。对吗?

此外,我的一些路线需要管理员身份,例如:

Router.route('/manage', function () {
    if ($.inArray('admin', Meteor.user().roles) > -1) {
        this.render('manage');
    } else {
        this.render('403_forbidden');
    }
});

该代码在当前位置安全吗?我也很想知道如何测试这些类型的安全漏洞,这样我以后就不用再问了。

谢谢

至于 router.js 的位置 ...

是的,您希望它在客户端和服务器上都可用。所以放在/lib目录里面就可以了。实际上,您可以将它放在 /client 或 /server 目录以外的任何地方。

FWIW,在我看过的大多数项目中,router.js 存储在顶级项目目录中。可能这是为了避免加载顺序问题(即如果路由器对 /lib、/client 或 /server 中的文件有一些依赖性,这些文件通常会在顶级文件之前加载),或者可能是因为我看过的每个人at 正在处理相同的样板代码。如果您想了解有关加载顺序的更多信息,请查看 Meteor 官方文档。

至于你的管理员问题,那条路线应该没问题。您可以通过打开 firebug 之类的客户端控制台并尝试以下操作来测试它:

Meteor.users.update(Meteor.userId(), {$set: {roles: ['admin']}});

我相信用户只能更新 Meteor.users.profile 中的字段,所以这应该会失败。如果没有,您可以添加以下拒绝规则(在客户端+服务器中);

Meteor.users.deny({
  update: function() {
    return true;
  }
});