我无法将自定义用户字段添加到Meteor用户对象(Meteor.user
)。我希望用户有一个“状态”字段,我宁愿不将它嵌套在“profile”(即profile.status)下,我知道默认情况下是r / w。 (我已经删除了autopublish
。)
我已经能够通过
将该字段发布到客户端了Meteor.publish("directory", function () {
return Meteor.users.find({}, {fields: {username: 1, status: 1}});
});
...但我无法获得允许登录用户更新自己的status
的设置权限。
如果我这样做
Meteor.users.allow({
update: function (userId) {
return true;
}});
在Models.js,
中,用户可以编辑每个用户的所有字段。那不酷。
我尝试过做
等变种Meteor.users.allow({
update: function (userId) {
return userId === Meteor.userId();
}});
和
Meteor.users.allow({
update: function (userId) {
return userId === this.userId();
}});
他们只是在控制台中找到了Access Denied错误。
documentation addresses这有点,但没有详细说明。我犯了什么愚蠢的错误?
(这类似于this SO问题,但该问题仅涉及如何发布字段,而不是如何更新字段。)
答案 0 :(得分:5)
这就是我开始工作的方式。
在服务器中我发布了userData
Meteor.publish("userData", function () {
return Meteor.users.find(
{_id: this.userId},
{fields: {'foo': 1, 'bar': 1}}
);
});
并设置允许如下
Meteor.users.allow({
update: function (userId, user, fields, modifier) {
// can only change your own documents
if(user._id === userId)
{
Meteor.users.update({_id: userId}, modifier);
return true;
}
else return false;
}
});
在客户端代码中,我更新用户记录的地方,只有在有用户
的情况下if(Meteor.userId())
{
Meteor.users.update({_id: Meteor.userId()},{$set:{foo: 'something', bar: 'other'}});
}
答案 1 :(得分:3)
尝试:
Meteor.users.allow({
update: function (userId, user) {
return userId === user._id;
}
});
来自collection.allow的文档:
更新(userId,doc,fieldNames,modifier)
用户userId想要更新文档doc。 (doc是数据库中当前版本的文档,没有建议的更新。)返回true以允许更改。