我希望有一些出版物只返回用户根据他们的角色有权访问的项目。我正在使用 alanning:roles 包来处理角色。
例如,我有一个出版物,如:
Meteor.publish('header_fields', function() {
console.log("header_fields: %j", this.userId);
if (Roles.userIsInRole(this.userId,['ADMIN','INSPECTOR'])) {
// Inspectors and Admins can see all header fields
return HeaderFields.find();
} else {
// Clients should only be able to see header fields for forms they have access to
var user = Meteor.users.find({_id: this.userId});
var formIds = [];
_.each(Forms.find({client_id: user.profile.client_id}).fetch(), function(form) {
this.push(form._id);
}, formIds);
return HeaderFields.find({form_id: {$in: formIds}});
}
});
我遇到的问题是,在我看到的所有示例中,发布都是在服务器文件夹中的 .js 文件中定义的,因此在客户端首次连接时运行并获取。但是,当客户端首次连接时,用户并未登录。但是,我不知道将这些出版物放在哪里或它应该如何工作。