我正在研究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,但我没有尝试更新编辑基本用户对象。我真的很感谢你的帮助!
答案 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(), {...})