我正在尝试保护访问特定的集合,但我遇到了麻烦。使用Collection.allow()
地图禁用插入,更新和删除没有任何问题。
问题是我还想过滤Collection.find()
和Collection.findOne()
函数返回的结果。我读到了Meteor.publish()
和Meteor.subscribe()
的内容,但不知何故我无法使其工作(它没有被过滤,我只能看到所有结果)。
在我的服务器代码中,我执行以下操作:
Groups = new Meteor.Collection("groups");
Meteor.publish("myGroups", function() {
if (Functions.isAdmin(userId)) {
return Groups.find({
sort: {
name: 1
}
});
}
});
我正在使用的功能确实有用(所以并不是它总是返回true
)。
在客户端代码中,我写了以下内容:
Meteor.subscribe("myGroups");
Groups = new Meteor.Collection("groups");
现在,当我在客户端Groups.find{});
时,我仍然可以获得所有结果(我不会得到任何结果)。
我误解了什么或做错了什么?我当然可以将集合完全放在服务器端,并使用Meteor.methods()
和Meteor.call()
来获取集合数据(以便它始终由服务器封装)。但我真的认为我不必这样做很酷。
此外,我想知道为什么这不能与插入/更新/删除Collection.allow()
在同一级别上完成。我的意思是,我们可以通过find / findOne向地图添加过滤器来读取数据。
答案 0 :(得分:0)
像@Tarang所说,通过执行以下命令删除自动发布工作:
meteor remove autopublish