我目前正在创建一个供多家公司使用的应用。 每个用户都有以下个人资料:
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可以运行。
有人知道我做错了什么吗?你有什么建议可以阅读,以便我对这个向前推进有所了解吗?
由于
答案 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();
}
});