我希望有一些出版物,这些出版物只返回用户可以根据其角色访问的项目。我正在使用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文件中定义的,因此在客户端首次连接时运行和获取。但是,当客户端最初连接时,用户不会登录。但是,我不知道该把这些出版物放在哪里,也不知道它应该如何运作。
发布于 2014-10-03 00:54:02
Meteor默认地以一种优雅的方式处理这个特定的用例,引用官方文档:
this.userId 在发布函数中访问。登录用户的id,如果没有用户登录,则为null。这是不变的。但是,如果登录用户更改,则使用新值重新运行发布函数.
userId
因此,这基本上意味着,如果您在客户端订阅了一个基于this.userId返回不同文档的出版物,就像在您的示例中一样,所有内容都应该是现成的!
https://stackoverflow.com/questions/26171803
复制相似问题