2015-11-16 2 views
0

Я использую meteor.js для написания большого модульного приложения. В моем приложении у меня есть коллекция под названием «Курсы». Схема объекта внутри коллекции, конечно, выглядит следующим образом:Метеор и несколько подписей на одну и ту же коллекцию (и тот же объект)

_id: MongoId 
title: String 
intro: String 
content: Object 
settings: Object 
    secret: Object 
    nonSecrets: Object 
members: [Object] 
    userId: MongoId 
    wantsMail: Boolean 
    gotMemberAt: Date 

У меня есть несколько публикаций:

# Publish an overview of all courses, I am Member at 
Meteor.publish 'myCourses', -> 
    return Courses.find(
      {members:{$elemMatch:{userId: @userId}}}, 
      {fields:{title:1, intro:1, 'settings.nonsecret':1, 'members.$':1}} 
    ) 

# Single Course Detail 
Meteor.publish 'singleCourse', (id) -> 
    return Courses.find(
     id, 
     {fields: {title:1, intro:1, content:1, 'settings.nonSecret':1}} 
    ) 

# Admin Information of course 
Meteor.publish 'singleCourseAdamin', (id) -> 
    return Courses.find(
     id, 
     {fields: {title:1, settings:1, members:1}} 
    ) 

Моя проблема теперь, что когда я присоединяюсь ко всем трем публикациям, я не получить других участников, чем в публикации myCourses.

Есть ли хороший текст о том, как публикация и подписка на подмножества одного и того же документа работают в реальных версиях метеоров и что мне нужно проверить, хочу ли я заставить его работать?

Или есть пакет, который упрощает ограничение доступа к полям для каждого пользователя?

ответ

0

Это known issue. Недавно я добавил раздел об этом в common mistakes (см. «Объединить ящик»). Лучше всего выбрать один из complicated workarounds:

  1. Реорганизация ваших данных, чтобы подполя не нужно было публиковать.
  2. Использование только одного издателя в то время, которое нуждается в определенном подполе (в этом случае, возможно, вы можете отключить издатель при активном издателе администратора). Это, вероятно, трудно гарантировать.
  3. Просто опубликуйте больше данных (все поле). Очевидно, что это может не работать в некоторых случаях, особенно если есть проблемы с безопасностью.

Также обратите внимание, что у вас должна быть та же проблема с полем settings, когда оба и последний и последний издатели являются активными.

+0

Я обнаружил, что проблема заключается в операторе 'members. $', Который делает паб/подсистему думать, что в этом массиве есть только один элемент. Когда я удаляю эту часть из публикации «myCourses», появляется все содержимое массива members. Похоже, мне нужен другой способ сделать это. – Tobi

Смежные вопросы