我正在尝试根据用户所属的组发布敏感信息的集合。
数据示例:
Items:
ItemA - GroupA
ItemB - GroupA
ItemC - GroupB
Users:
UserA - GroupB
UserB - GroupA
UserC - GroupA
但是当我尝试做的时候
Meteor.publish('groupItems', function () {
return Items.filter({ groupId : Meteor.user().profile.groupId });
}
失败是因为我只允许在这样的电话中访问Meteor.userId()
。 (如此歧义错误消息中所表示的,服务器端:
Exception from sub 5jnantRJ6gyHpTkTy Error: Meteor.userId can only be invoked in method calls. Use this.userId in publish functions.
问题:我如何根据用户属性过滤收藏集,例如groupId
?
答案 0 :(得分:1)
在发布内部,如果用户已登录,则您可以访问this.userId,它允许您查询数据库以获取其余用户信息。因此,您可以将您的发布重新编写为:
Meteor.publish('groupItems', function () {
if ( ! this.userId ) return []; //return an empty array if no user is logged in.
var user = Meteor.users.find( this.userId );
return Items.filter({ groupId : user.profile.groupId });
});