【发布时间】:2012-07-29 21:48:57
【问题描述】:
我有一个名为 Profiles 的服务器端 mongo 集合。
如果用户:adminId,我需要发布和订阅整个配置文件集合。
这样管理员可以编辑、更新等...每个配置文件集合项。
但我希望用户能够看到他们的个人资料记录。
所以我尝试了这个......
客户端
MyProfile = new Meteor.Collection("myprofile");
Meteor.subscribe('profiles');
Meteor.subscribe('myprofile');
通用 - 客户端和服务器端
Profiles = new Meteor.Collection("profiles");
服务器端 - 配置文件的发布和订阅工作正常。
// this returns all profiles for this User
// if they belong to an ACL Group that has acl_group_fetch rights
Meteor.publish("profiles", function() {
var user_groups = Groups.find({users: this.userId()});
var user_groups_selector = [];
user_groups.forEach(function (group) {
user_groups_selector.push(group._id);
});
return Profiles.find( {
acl_group_fetch: {
$in: user_groups_selector
}
});
});
问题似乎从这里开始。 Profiles.find 正在返回集合项,因为我可以将它们输出到控制台服务器端。但由于某种原因,发布和订阅不起作用。客户端什么也没收到。
// return just the users profile as myprofile
Meteor.publish("myprofile", function() {
return Profiles.find({user: this.userId()});
});
任何想法我做错了什么。我希望能够发布用户 A 可以插入、获取、更新、删除但用户 B(C、D 和 E)只能看到他们的记录的记录集合。
【问题讨论】:
-
Steeve - 一个小问题:小心第一次订阅('profiles');除非您将其包装在自动订阅上下文中,否则它不会在用户组更改时自动更新。我不认为这是你看到的问题。
-
用户没有看到自己的个人资料?或者只是不是来自“个人资料”订阅的个人资料列表?您确定要等到数据加载完毕?
-
MyProfile.find 或 .findOne 在客户端的文档集合中没有任何内容。我什至已经从 Profiles 中提取了所有组代码,所以它现在发布给所有客户端只是为了看看它确实如此。这是我第一次尝试在同一个服务器端 mongo 集合上进行两次发布/订阅。
-
如果您可以继续在 IRC 上继续讨论可能更容易?
-
我稍后会和你联系,现在不能做 IRC。感谢您在 Google 群组中提供的帮助!
标签: meteor