2012-05-04 89 views

回答

2

正如马特提到的,解决方法已不再需要。然而,作为标准,它似乎需要删除autopublish软件包以确保系统安全。 Meteor文档涵盖确保集合的安全性:http://docs.meteor.com/#meteor_collection

+0

大有前途!看着它。谢谢! – thomasloh

+1

在Meteor 0.5.0及更新版本中,此解决方法不是必需的。 – debergalis

7

使用allowdeny来定义每个客户端允许进行哪些数据库更改。

从文档:

当客户端调用插入,更新或删除集合,集合的允许和拒绝回调被称为服务器上,以确定是否写应该被允许。如果至少有一个允许回调允许写入,并且没有拒绝回调否认写入,则允许写入继续。

这些检查仅在客户端试图直接写入数据库时​​运行,例如通过调用事件处理程序中的更新。服务器代码是可信的,不受限制和拒绝。这包括使用Meteor.call调用的方法 - 它们需要执行自己的访问检查,而不是依赖允许和拒绝。

您可以随意调用允许次数,每次调用都可以包含插入,更新和删除功能的任意组合。如果他们认为操作应该被允许,函数应该返回true。否则,他们应该返回false,或者根本没有(undefined)。在这种情况下,Meteor将继续搜索收集中的任何其他允许规则。

+0

此外,为了安全读取,只需返回一个游标,其查询在'Meteor.publish'函数内使用'this.userId'。您还需要运行'$ meteor remove autopublish insecure'来关闭将所有数据发布到客户端的初学者选项,并允许来自客户端的大部分更改。 –

+0

今天我学到了,除非你也使用'allow',否则你不能使用'deny'。它被埋在文档中,如下所示:“如果您从不在集合上设置任何允许规则,则所有写入集合的客户端都将被拒绝,并且只能从服务器端代码写入集合。” –