1

我在将自定义用户字段添加到 Meteor 用户对象 ( Meteor.user) 时遇到问题。我希望用户有一个“状态”字段,我不想将它嵌套在“配置文件”(即 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(); 
}});

他们只是在控制台中让我访问拒绝错误。

文档在某种程度上解决了这个问题,但没有详细说明。我犯了什么愚蠢的错误?

(这类似于SO question,但该问题仅涉及如何发布字段,而不是如何更新它们。)

4

2 回答 2

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'}});
}
于 2013-05-30T06:19:11.107 回答
3

尝试:

Meteor.users.allow({
  update: function (userId, user) {     
    return userId === user._id; 
  }
});

从 collection.allow 的文档中:

更新(用户 ID、文档、字段名称、修饰符)

用户 userId 想要更新文档文档。(doc 是数据库中文档的当前版本,没有建议的更新。)返回 true 以允许更改。

于 2013-05-17T04:02:06.397 回答