1

我正在尝试确保访问特定集合的安全,但我在执行此操作时遇到了麻烦。使用地图禁用插入、更新和删除没有问题Collection.allow()

问题是我还想过滤Collection.find()andCollection.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 读取数据。

4

1 回答 1

0

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

meteor remove autopublish
于 2013-11-15T12:14:05.230 回答