Я работаю над системой групп пользователей. У каждой группы есть несколько функций, и я хочу сделать взаимодействие с коллекцией групп максимально безопасным и простым, поскольку она все еще находится на ранней стадии.
Прямо сейчас у меня есть групповой раздел на моем сайте, где я использую несколько вложенных страниц. Цель раздела — позволить пользователю войти в группу, запросить членство, если группа является частной, просмотреть объекты одной группы и т. д.
Например, в разделе моей группы я могу загрузить в выход страницу «просмотреть все группы», страницу «создать новую группу» или «просмотреть только мои группы» (те, в которых я состою) или «просмотреть группу». ", чтобы получить информацию о группе.
Мой первый подход заключался в создании одного файла controller.js
для каждой подстраницы, который вызывает одну подписку, адаптированную для нужд подстраницы. Например, у меня есть публикация/подписка «all_group» для подстраницы «просмотреть все группы» и «my_groups» для подстраницы «просмотреть только мои группы».
Но это становится действительно грязным. Кроме того, я объявил свою «групповую» коллекцию в обеих папках, поэтому я не уверен, откуда берутся данные, доступные клиенту.
Теперь, когда я объяснил ситуацию, вот мои вопросы:
- когда я выполняю
console.table(Groups.find().fetch());
на клиенте, я вижу поля, которых там быть не должно (т.е. не возвращаемые моей текущей публикацией или какой-либо другой). Это потому, что я объявил коллекцию «группа» на стороне клиента? Как это исправить? - Должен ли я избавиться от всех этих публикаций и создать только одну со всем, что разрешено видеть клиенту? Затем я подписался бы на него из контроллера страницы раздела группы и работал с одним набором данных.
- Должен ли я просто блокировать любую вставку/обновление/удаление из клиента с помощью правил разрешения/запрета и делать это только с помощью методов?
- Было бы безопасно/рекомендовано поместить мои методы в папку
both
, чтобы я не потерял функцию компенсации задержки?
EDIT Хорошо, я был в бешенстве, потому что у меня были все данные моей коллекции на стороне клиента, но это был просто плохой запрос при публикации (я использовал обе проекции field:1
и field:0
). Осталось два вопроса:
- Если я использую методы, я предполагаю, что мне не нужно запрещать все в собственном драйвере, я просто должен быть более строгим, чем позволяет какой метод, верно?
- Если я помещу свои методы в обе папки, они будут выполняться как на клиенте, так и на сервере, поэтому в контексте «клиент в автономном режиме», даже если клиент испортит мои методы, сервер должен отменить изменения, если результат клиента отличается чем его (при условии, что изменения не могут быть сделаны с помощью разрешающих-запрещающих правил)? И будет ли компенсация задержки работать даже с методами?