尝试更新Meteor.users导致“访问被拒绝”

时间:2015-12-04 09:54:25

标签: javascript meteor coffeescript

我正在研究Meteor项目,我正在尝试更新特定用户的个人资料。但是,我总是收到

    update failed: Access denied

我的用户ID存储在变量user_id中,我的代码看起来像

    Meteor.users.update({_id: user_id}, {$set: {'profile.participate_studies': updated_user_list}}) 

然而,如果我这样做

    Meteor.users.update({_id: Meteor.userId()}, {$set: {'profile.participate_studies': updated_user_list}})

更新有效。这让我觉得我存储的id存在一些问题。 Meteor.userId()返回的内容和包含id的字符串之间是否存在差异?我知道id是正确的,因为我可以在shell中使用id访问它。

我查看了Updating Meteor.users from client,但我没有尝试更新编辑基本用户对象。我真的很感谢你的帮助!

1 个答案:

答案 0 :(得分:4)

您可以更新自己的个人资料,所以当您这样做时

Meteor.users.update({_id: Meteor.userId()}, {
  $set: {'profile.participate_studies': updated_user_list}
})

您更新自己的个人资料(Meteor.userId()会返回当前登录用户的ID)。

当您更新其他用户的个人资料时,您会收到Access denied错误。

您需要为allow设置Meteor.users规则:

Meteor.users.allow({
  update: function(userId, user) {
    return true; 

    /**
     * Don't use `return true` in production!
     * You probably need something like this:
     * return Meteor.users.findOne(userId).profile.isAdmin;
     */
  }
});

允许规则的完整文档:http://docs.meteor.com/#/full/allow

提示: 您可以使用简写来更新ID:

Meteor.users.update(Meteor.userId(), {...})