Я хотел бы иметь некоторые публикации, которые возвращают только те элементы, к которым пользователь имеет доступ в зависимости от их роли. Я использую пакет 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 в папке сервера и, таким образом, запускаются и получаются при первом подключении клиента. Однако пользователь не вошел в систему, когда клиент впервые подключается. Но я не знаю, куда поместить эти публикации или как это должно работать.