Допустим, я не хочу, чтобы мой клиент имел доступ к коллекции, но я хочу, чтобы мой клиент мог задавать определенные вопросы об объектах в этой коллекции. Как бы я этого добился?
В качестве примера предположим, что я хочу знать, вошел ли в данный момент пользователь в систему. Когда пользователь впервые входит в систему, я устанавливаю идентификатор базы данных этого пользователя в 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 для этого тоже не подходит, и есть еще один способ, который я упускаю. Любой совет приветствуется!