Должен ли я использовать одну публикацию для каждой коллекции или несколько?

Я работаю над системой групп пользователей. У каждой группы есть несколько функций, и я хочу сделать взаимодействие с коллекцией групп максимально безопасным и простым, поскольку она все еще находится на ранней стадии.

Прямо сейчас у меня есть групповой раздел на моем сайте, где я использую несколько вложенных страниц. Цель раздела — позволить пользователю войти в группу, запросить членство, если группа является частной, просмотреть объекты одной группы и т. д.

Например, в разделе моей группы я могу загрузить в выход страницу «просмотреть все группы», страницу «создать новую группу» или «просмотреть только мои группы» (те, в которых я состою) или «просмотреть группу». ", чтобы получить информацию о группе.

Мой первый подход заключался в создании одного файла controller.js для каждой подстраницы, который вызывает одну подписку, адаптированную для нужд подстраницы. Например, у меня есть публикация/подписка «all_group» для подстраницы «просмотреть все группы» и «my_groups» для подстраницы «просмотреть только мои группы».

Но это становится действительно грязным. Кроме того, я объявил свою «групповую» коллекцию в обеих папках, поэтому я не уверен, откуда берутся данные, доступные клиенту.

Теперь, когда я объяснил ситуацию, вот мои вопросы:

  • когда я выполняю console.table(Groups.find().fetch()); на клиенте, я вижу поля, которых там быть не должно (т.е. не возвращаемые моей текущей публикацией или какой-либо другой). Это потому, что я объявил коллекцию «группа» на стороне клиента? Как это исправить?
  • Должен ли я избавиться от всех этих публикаций и создать только одну со всем, что разрешено видеть клиенту? Затем я подписался бы на него из контроллера страницы раздела группы и работал с одним набором данных.
  • Должен ли я просто блокировать любую вставку/обновление/удаление из клиента с помощью правил разрешения/запрета и делать это только с помощью методов?
  • Было бы безопасно/рекомендовано поместить мои методы в папку both, чтобы я не потерял функцию компенсации задержки?

EDIT Хорошо, я был в бешенстве, потому что у меня были все данные моей коллекции на стороне клиента, но это был просто плохой запрос при публикации (я использовал обе проекции field:1 и field:0). Осталось два вопроса:

  1. Если я использую методы, я предполагаю, что мне не нужно запрещать все в собственном драйвере, я просто должен быть более строгим, чем позволяет какой метод, верно?
  2. Если я помещу свои методы в обе папки, они будут выполняться как на клиенте, так и на сервере, поэтому в контексте «клиент в автономном режиме», даже если клиент испортит мои методы, сервер должен отменить изменения, если результат клиента отличается чем его (при условии, что изменения не могут быть сделаны с помощью разрешающих-запрещающих правил)? И будет ли компенсация задержки работать даже с методами?

person Billybobbonnet    schedule 06.06.2015    source источник


Ответы (1)


Чтобы лучше контролировать и визуализировать свои подписки, вы можете использовать msavin:mongol.

Создание одной универсальной публикации — плохая идея с точки зрения производительности (отправка всех данных всем клиентам будет проблемой для всех участников).

Если вы используете методы и удалили autopublish, то да все запрещено... Кроме обновлений на собственном профиле пользователя. Вы также можете вручную отклонить это.

С методами и правилами сбора вы должны поделиться кодом проверки. Таким образом, клиент и сервер проверяются одинаково (и всегда должны давать одни и те же результаты), поэтому, если ваш клиент не ошибается с консолью, проблем не должно быть, и компенсация задержки должна остаться.
Если ваш серверный метод делает что-то, о чем клиент не должен знать, вы также можете определить метод один раз на сервере и один раз на клиенте. Тот же эффект.

person Kyll    schedule 07.06.2015