流星过滤器集合

时间:2013-05-09 20:24:29

标签: meteor

我正在尝试保护访问特定的集合,但我遇到了麻烦。使用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向地图添加过滤器来读取数据。

1 个答案:

答案 0 :(得分:0)

像@Tarang所说,通过执行以下命令删除自动发布工作:

meteor remove autopublish