铁路由器代码的位置

时间:2015-07-22 20:21:49

标签: meteor iron-router

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

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

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

该代码在当前位置是否安全?我也很想知道如何测试这些安全漏洞,以便将来不必提问。

由于

1 个答案:

答案 0 :(得分:1)

至于router.js的位置......

是的,您希望它在客户端和服务器上都可用。因此放入/ lib目录就可以了。实际上,您可以将它放在/ client或/ server目录之外的任何位置。

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

至于你的管理问题,该路线应该没问题。您可以通过打开像firebug这样的客户端控制台并尝试类似以下内容来测试它:

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

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

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