Метод Meteor против deny / allow

В «Метеор», когда я предпочитаю метод по правилу deny ?

Мне кажется, что правила allow / deny должны быть одобрены, поскольку их цель более ясна, и кто-то знает, где их искать.

Тем не менее, в книге Discover Meteor предотrotation дублирования вставок («дубликат», определяемый как добавление документа, чье свойство url уже определено в каком-либо другом документе той же коллекции), как говорят, должно определяться с помощью метода (и слева как упражнение для читателя, глава 8.3).

Я думаю, что я могу реализовать эту проверку таким образом, что я нахожу гораздо яснее:

 Posts.deny({ update: function(userId, post, fieldNames, modifier) { return Posts.findOne({ url: modifier.$set.url, _id: { $ne: post._id } }); } }); 

(NB, если вы знаете пример, да, я добровольно отказался от того, что «только подмножество атрибутов изменено» проверьте, чтобы вопрос был более конкретным).

Я понимаю, что есть другие операторы обновления, чем $set в Mongo, но они выглядят типизированными, и я не хочу оставлять открытое отверстие безопасности.

Итак: есть ли какие-то недостатки в моем deny ? Независимо, должен ли я одобрить метод? Что я получу от этого? Что я проиграю?

    Обычно я стараюсь избегать субъективных ответов, но это действительно важная дискуссия. Сначала я бы рекомендовал прочитать Meteor Methods vs Client-Side Operations из блога Discover Meteor. Обратите внимание, что в Edthena мы исключительно используем методы по причинам, которые должны стать очевидными.

    методы

    профессионал

    • Методы могут правильно применять правила схемы и проверки произвольной сложности без необходимости использования внешней библиотеки. Side note – check – отличный инструмент для проверки структуры ваших входов.

    • Каждый метод является единственным источником правды в вашем приложении. Если вы создаете метод posts.insert, вы можете легко убедиться, что это единственный способ в вашем приложении вставить сообщения.

    против

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

    Операции на стороне клиента

    профессионал

    • allow / deny имеет простой декларативный стиль.

    против

    • Проверка схемы и разрешений на операцию update бесконечно тяжелая. Если вам нужно обеспечить соблюдение схемы, вам понадобится использовать внешнюю библиотеку, например collection2 . Только эта причина должна дать вам паузу.

    • Модификации могут распространяться по всему вашему приложению. Поэтому может быть сложно определить, почему произошла конкретная операция с базой данных.


    Резюме

    На мой взгляд, allow / deny более эстетично, однако фундаментальная слабость заключается в обеспечении разрешений (особенно в отношении обновлений). Я бы рекомендовал операции на стороне клиента в случаях, когда:

    • Ваша кодовая база относительно невелика, поэтому ее можно легко grep для всех экземпляров, где возникает конкретный модификатор.

    • У вас не так много разработчиков, поэтому вам не нужно все соглашаться с тем, что есть один и только один способ вставки в коллекцию X.

    • У вас есть простые правила разрешения – например, только владелец документа может изменить любой его аспект.

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


    обновление 2/22/15

    Сашко Стубайло создал предложение заменить allow / deny с помощью методов insert / update / remove .

    обновить 6/1/16

    Метеоритный проводник принимает положение, allow/deny всегда избегать .

    Давайте будем гением компьютера.