У меня есть набор пользователей, определенных следующим образом:Как выполнить пользовательские настройки конфиденциальности в Метеоре
Accounts.createUser({
username:'Simon',
email:'[email protected]',
profile:{
firstname:'Simon',
lastname:'Surname',
location:'Home Address',
privacy: {
location:0,
emails:0 } //Location and emails are private and should not be disclosed
}
});
Мой вопрос, как я могу опубликовать запись этого пользователя для других пользователей, чтобы просмотреть, принимая во внимание профиль конфиденциальности настройки. В этом примере я установил неприкосновенность частной жизни для местоположения и адресов электронной почты с нулем, с тем чтобы эта информация не была опубликована для этого пользователя.
Я хотел бы опубликовать его, используя стандартный метод:
Meteor.publish("usersWithPublicEmails", function() {
return Meteor.users.find();
});
Но я не могу видеть способ указать селектор или поля таким образом, что будут опубликованы только публичная информация.
Я пытался добавить дополнительные публикации в виде: но не кажется
Meteor.publish("allUsers", function() {
return Meteor.users.find({}, {fields:{username:1}});
});
Meteor.publish("usersWithPublicEmails", function() {
return Meteor.users.find({"profile.privacy.emails":1}, {fields:{username:1, emails:1}});
});
селектор, чтобы возвращаться электронные письма, как я ожидал. Я ищу оптимальный способ сделать это с точки зрения производительности.
Ммма я получил эту работу, добавив недостающую подписку в моем модуле router.js Однако после добавления дополнительного количества приватности. настройки (включая публикации и подписки) Я вижу некоторые странное поведение с 4 подписок в маршрутизаторе:. \t 'waitOn: функция() { \t \t возвращение Meteor.subscribe ('ALLUSERS') && \t \t \t Meteor.subscribe ('usersWithPublicName') && \t \t \t Meteor.subscribe ('usersWithPublicLocation') && \t \t \t Meteor.subscribe ('usersWithPublicEmails'); \t}, 'Я считаю, что третий не эффективен. Изменение порядка удаляет соответствующие данные со страницы моих пользователей! – Braunius
Я также попытался указать мой waitOn как этот \t 'waitOn: функция() { \t \t возвращение [\t \t \t \t Meteor.subscribe ('ALLUSERS'), \t \t \t Meteor.subscribe ('usersWithPublicName'), \t \t \t Meteor.subscribe ('usersWithPublicLocation'), \t \t \t Meteor.subscribe ('usersWithPublicEmails')]; \t}, 'с теми же результатами. – Braunius