我想验证我将Iron Router代码放在正确的位置。现在我将它存储在lib/router.js
中,这意味着代码在客户端和服务器上共享。这是对的吗?
此外,我的一些路线需要管理员状态,例如:
Router.route('/manage', function () {
if ($.inArray('admin', Meteor.user().roles) > -1) {
this.render('manage');
} else {
this.render('403_forbidden');
}
});
该代码在当前位置是否安全?我也很想知道如何测试这些安全漏洞,以便将来不必提问。
由于
答案 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;
}
});