Получение значений с сервера.

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

В качестве примера предположим, что я хочу знать, вошел ли в данный момент пользователь в систему. Когда пользователь впервые входит в систему, я устанавливаю идентификатор базы данных этого пользователя в Sessionи в файле cookie. В настоящее время приложение говорит, что пользователь вошел в систему, если !Session.equals("user_id", null), что, конечно, очень небезопасно, потому что теперь я могу открыть firebug и сказать Session.set("user_id", "foo"), и теперь я вошел в систему.

Я не хочу, чтобы клиент чтобы иметь доступ к коллекции Users на данный момент. Единственный клиентский код, который имеет доступ к этой коллекции, заключен в самовыполняющуюся функцию, чтобы защитить ее (Я не совсем уверен, что это правильный способ обеспечения безопасности в Meteor, поэтому не стесняйтесь рекомендовать что-нибудь эти строки тоже). Поэтому вместо этого я хотел бы вызвать некоторый код на стороне сервера и передать ему идентификатор, установленный в сеансе, и сообщить мне, является ли это действительным пользователем или нет.

Вот как я хотел бы видеть это setup :

// client
function logged_in() {
  return SomeServerMethodThatValidatesUserId(Session.get("user_id"));
}

Meteor.methods, кажется, не отвечает всем требованиям, так как Meteor.callвыполняет асинхронный обратный вызов. Модель pub/sub выглядит немного более многообещающе, но из документации я не совсем понимаю, как она работает.

Похоже, мне следует вызвать this.setиз обработчика публикации, чтобы установить некоторые значения на клиенте, но я не могу понять, где эти значения становятся доступными.

Или, может быть, модель pub/sub для этого тоже не подходит, и есть еще один способ, который я упускаю. Любой совет приветствуется!

11
задан Samo 22 April 2012 в 04:43
поделиться