从Meteor服务器端方法访问集合

时间:2014-07-02 16:01:47

标签: javascript meteor

服务器端方法是否也受出版物管辖?我认为服务器端方法可以修改它想要的任何内容。

就我而言,在template的帮助者中,我有Meteor.call('serverMethod', id),然后在serverMethod中定义collections/methods.js

通过发布,template只能访问一条记录(id一条),但这是唯一serverMethod看到的记录。

当我将所有内容发布到template时,serverMethod会看到所有内容。

这不奇怪吗?我认为服务器方法的目的是值得信任的,这样我就可以修改我需要的任何内容而无需发布整个数据库?有什么我想念的吗?

我的allow权限设置正常,与应用的其他部分一样正常。

2 个答案:

答案 0 :(得分:1)

您的初步假设是正确的 - 服务器上的方法是#34;受信任的代码",因此可以完全访问您的集合(出版物和拒绝规则不适用)。

我认为混淆是serverMethod在共享目录中定义,因此将在客户端和服务器上运行(除非它用Meteor.isServer包装)。因此,如果在客户端上启动呼叫,它将运行两个版本。根据方法实际执行的操作以及调用方式,您可能只能看到客户端调用的结果。 方法的客户端版本受已发布到客户端的内容的限制。

我怀疑你的助手里面有这样的事情:

var result = Meteor.call('serverMethod', id);

这说:"调用serverMethod的客户端模拟并立即返回结果"。为了从服务器实际获取值,您需要使用回调。例如:

Meteor.call('serverMethod', id, function (error, result) { console.log(result); } );

如果以上信息准确描述了问题,那么您现在还有另一个问题需要处理:您无法在模板助手中使用异步回调的值。有关详细信息,请参阅this question

答案 1 :(得分:0)

服务器端方法可以访问所有内容,并且不受允许或拒绝规则或发布方法的约束

您必须手动检查用户是否有权按每种方法执行某些操作。

可能是因为serverMethod正在从客户端传递id,所以从技术上讲,它最终只会看到客户端可以看到的内容? (因为id是什么传递回服务器)