Скажем, я не хочу, чтобы у моего клиента был доступ к коллекции, но я хочу, чтобы мой клиент мог задать некоторые вопросы об объектах в этой коллекции. Как я могу это достичь?
В качестве примера, скажем, я хочу знать, есть ли в настоящий момент пользователь, вошедший в систему. Когда пользователь впервые входит в систему, я устанавливаю идентификатор базы данных пользователя в Session
и в файле cookie. В настоящее время приложение заявляет, что пользователь вошел в систему, если !Session.equals("user_id", null)
, что, конечно, очень небезопасно, потому что теперь я могу открыть firebug и сказать Session.set("user_id", "foo")
, и теперь я вошел в систему.
Я не хочу, чтобы на данный момент у клиента был доступ к коллекции Пользователи. Единственный клиентский код, который имеет доступ к этой коллекции, прилагается к функции самоисполнения, чтобы защитить ее (я не совсем уверен, что это правильный способ сделать безопасность в Meteor, поэтому не стесняйтесь рекомендовать что-то по этим линиям также). Поэтому вместо этого я бы назвал код на стороне сервера и передал ему идентификатор, который был установлен в сеансе, и сообщите мне, является ли это действительным пользователем или нет.
Вот как я хотел бы увидеть его настройку:
// client
function logged_in() {
return SomeServerMethodThatValidatesUserId(Session.get("user_id"));
}
Meteor.methods
, похоже, не соответствует счету, так как Meteor.call
выполняет асинхронный обратный вызов. Паб/под-модель выглядит несколько более перспективной, но из документации я не совсем уверен, как она работает.
Кажется, что я должен вызвать this.set
из обработчика публикации, чтобы установить некоторые значения на клиенте, но я не могу понять, где эти значения становятся доступными.
Или, может быть, модель pub/sub не подходит для этого, и есть другой способ, который мне не хватает. Любые советы приветствуются!