Meteor:使用用户配置文件属性而不是ID发布

时间:2016-03-20 14:03:43

标签: mongodb meteor publish

我目前正在创建一个供多家公司使用的应用。 每个用户都有以下个人资料:

username: johnDoe    
emails: [{address: "some@email.com", verified: true}],
profile: {
             name: "John Doe",
             companyId: "1234"
}

然后我有一个公司对象的集合(称为公司),其中包含特定于该公司的配置信息,模板等。

{
    id: "1234",
    configuration: {},
    templates: []
}

为了隔离每个公司的数据,我只希望发布与用户个人资料companyId匹配的公司ID数据。

if (Meteor.isServer) {
    // collection to store all customer accounts
    Companies = new Mongo.Collection('Companies');

    // publish collection
    Meteor.publish("Company", function () {
         return Companies.find({id: Meteor.user().profile.companyId});
    })
}

如果我对诊所Id进行硬编码,这当前有效。

    // publish collection
    Meteor.publish("Company", function () {
         return Companies.find({id: "1234");
    })

但是使用Meteor.user()。profile.companyId返回一个空光标。 这意味着问题要么是我使用了错误的函数,要么更可能是发布在user()之前发生.profit.companyId可以运行。

有人知道我做错了什么吗?你有什么建议可以阅读,以便我对这个向前推进有所了解吗?

由于

1 个答案:

答案 0 :(得分:1)

尝试在发布函数中执行显式的findOne():

// publish collection
Meteor.publish("Company", function () {
     var user = Meteor.users.findOne({_id: this.userId});
     if(user && user.profile && user.profile.companyId) {
       return Companies.find({id: user.profile.companyId});
     } else {
       console.log(user);
       return this.ready();
     }
});