根据当前用户属性发布Meteor Collection

时间:2014-08-19 07:39:00

标签: javascript mongodb meteor

我正在尝试根据用户所属的发布敏感信息的集合

数据示例:

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

1 个答案:

答案 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 });
});