【发布时间】:2015-01-27 15:18:04
【问题描述】:
我有一组这样定义的用户:
Accounts.createUser({
username:'Simon',
email:'simon@email.com',
profile:{
firstname:'Simon',
lastname:'Surname',
location:'Home Address',
privacy: {
location:0,
emails:0 } //Location and emails are private and should not be disclosed
}
});
我的问题是,在考虑个人资料隐私设置的情况下,如何发布此用户的记录供其他用户查看。在此示例中,我将位置和电子邮件的隐私设置为零,目的是不为该用户发布此信息。
我想使用标准方法发布它:
Meteor.publish("usersWithPublicEmails", function () {
return Meteor.users.find();
});
但我看不到以仅发布公共信息的方式指定选择器或字段的方法。
我已尝试添加表单的其他出版物:
Meteor.publish("allUsers", function () {
return Meteor.users.find( {}, {fields:{username:1}} );
});
Meteor.publish("usersWithPublicEmails", function () {
return Meteor.users.find( {"profile.privacy.emails":1}, {fields:{username:1, emails:1}} );
});
但选择器似乎没有像我预期的那样返回电子邮件。从性能的角度来看,我正在寻找最佳方法。
【问题讨论】:
-
嗯。我通过在我的 router.js 模块中添加一个缺少的订阅来完成这项工作。但是,在添加更多隐私设置(包括出版物和订阅)后,我看到了一些奇怪的行为。我的路由器中有 4 个订阅:
waitOn: function(){ return Meteor.subscribe('allUsers') && Meteor.subscribe('usersWithPublicName') && Meteor.subscribe('usersWithPublicLocation') && Meteor.subscribe('usersWithPublicEmails') ; },我发现第 3 个订阅无效。更改顺序会从我的用户页面中删除相应的数据! -
我也尝试像这样
waitOn: function(){ return [ Meteor.subscribe('allUsers'), Meteor.subscribe('usersWithPublicName'), Meteor.subscribe('usersWithPublicLocation'), Meteor.subscribe('usersWithPublicEmails') ] ; },指定我的waitOn,结果相同。