2

我试图为所有新创建的用户添加一个属性“权限”。但它不知何故不起作用。我使用此代码添加属性

 Accounts.onCreateUser(function(options, user) {
  user.permission = 'default';
  if (options.profile)
    user.profile = options.profile;
  return user;
});

但是当我在客户端检索用户对象时,我看不到该属性

u = Meteor.users.findOne(Meteor.userId)
u.permission
>undefined

我究竟做错了什么?

4

2 回答 2

9

你正确地创建它。问题是客户端看不到这个值。取自文档:

默认情况下,服务器会发布用户名、电子邮件和个人资料

因此,您需要发布/订阅附加字段。

服务器:

Meteor.publish('userData', function() {
  if(!this.userId) return null;
  return Meteor.users.find(this.userId, {fields: {
    permission: 1,
  }});
});

客户:

Deps.autorun(function(){
  Meteor.subscribe('userData');
});
于 2013-07-31T07:10:40.170 回答
1

Meteor.users.findOne(Meteor.userId)应改为Meteor.users.findOne(Meteor.userId()).

另外,我不确定用户对象上的哪些字段实际传输到客户端。您可能需要更改user.permission = 'default'为,options.profile.permission = 'default'以便您的Accounts.onCreateUser遗嘱如下所示:

Accounts.onCreateUser(function(options, user) {
    if(!options.profile){
       options.profile = {}
    }
    options.profile.permission = 'default'
    if (options.profile)
        user.profile = options.profile;
    return user;
});
于 2013-05-17T10:16:42.123 回答