2014-06-27 2 views
0

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

ответ

0

Это не способ, которым метеор должен работать в общем случае. Вы должны реализовать большинство своих методов сбора (обновление, вставка, удаление) только на стороне клиента и проверить сервер прав на обновления.

Если у вас есть коллекция с некоторыми сообщениями, не делайте Meteor.call('addNewPost', newPost). И a Posts.insert(...) на стороне сервера метеорного метода addNewPost. Это было бы классическим способом с REST API; но это метеор :)

Вы направляетесь на сторону клиента непосредственно для Posts.insert(...). Это будет отображаться на стороне клиента сразу и будет пытаться обновить базовую серверную сторону.

Затем на стороне сервера, вы должны установить обширные разрешения:

Posts.allow({ 

    'insert': function(userId, doc) { 
     // Check if the user exists 
     // if he has the right to insert 
     // if what he tries to insert is ok for you 
     // ... 
    }, 

    'update': function(userId, docs, fields, modifier) { 
     // same, width the fields, the doc, the user... 
    }, 

    'remove': function(userId, docs) { 
     // same again 
    } 

}); 

Вы можете allow() или deny() на все, что вы можете сделать на коллекции. Это может показаться странным, но это реальная основа хорошей компенсации за задержку. Это может быть нарушение безопасности HUDGE, если вы не знаете, как настроить свое разрешение так, как должно быть. Но если вы знаете, как это сделать, проблема с безопасностью абсолютно отсутствует.

(мой совет все отрицать, но конкретные элементы, которые вы хотите разрешить)

Итак:

  1. пользователь обновляет свою базу данных на стороне клиента с помощью метода на стороне клиента: myCollection.update()
  2. он видит результаты
  3. метеора делает его магию, чтобы отправить его на сервер
  4. проверка сервера, если это разрешено
  5. если да, то пишите в базу и отправить другим абонентам
  6. если нет, то отправьте запрос на вновь обратиться в сторону изменения клиентский
+0

Спасибо, теперь у меня есть разрешения для всех моих коллекций для обеспечения безопасности, поэтому не имеет значения, являются ли мои методы клиентами, и я разрешаю/запрещаю? Или они должны быть перемещены в каталог сервера для максимальной безопасности. – theo3335796

+0

Не знаю, будет ли запущена клиентская система allow/deny. Мое первое предположение - нет. Я бы сказал, что это чистая серверная часть. Я думаю, что добавление этих элементов в ваш клиентский код только добавит жир вашему конечному клиенту js. – fabien

+0

Я поместил код allow/deny в папку моих коллекций, поэтому делится как на клиенте, так и на сервере, поэтому, надеюсь, он должен работать как в – theo3335796

0

Да. вы можете сделать его безопасным и иметь общий каталог для коллекций. Функция компенсации задержки метеоритов работает только в том случае, если у вас есть коллекции как на сервере, так и на клиенте. Если вы используете общий код для коллекций, вы должны это сделать.

  • удалить отслаивающиеся, autopublish пакеты
  • использование publish/subscribe
  • настроить allow/deny правила для каждой коллекции

более по безопасности метеора. http://security-resources.meteor.com/

+0

Спасибо, так что я могу есть общие методы, и они все еще будут в безопасности, как сервер только методы? – theo3335796

+0

Имейте в виду, что общий код отправляется клиенту, чтобы каждый мог его просмотреть. Это зависит от того, что вы хотите архивировать. Если вы спрашиваете о том, как Meteor.methods ограничивают его только сервером. – pahan

+0

Я говорю о Метеор.методы, но я думал, что это быстрее, если общий, поскольку метеорит может имитировать метод – theo3335796

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