假设我不希望我的客户有权访问某个集合,但我确实希望我的客户能够就该集合中的对象提出某些问题。我将如何实现这一目标?
例如,假设我想知道当前是否有用户登录。当用户第一次登录时,我Session
在 cookie 中设置了该用户的数据库 ID。目前,应用程序说用户登录 if !Session.equals("user_id", null)
,这当然是非常不安全的,因为现在我可以打开 firebug 并说Session.set("user_id", "foo")
现在我已经登录了。
我不希望客户端此时可以访问用户集合。唯一可以访问此集合的客户端代码包含在一个自执行函数中以保护它(我不确定这是否是在 Meteor 中进行安全性的正确方法,所以请随意推荐一些类似的东西以及)。因此,我想调用一些服务器端代码并将会话中设置的 id 传递给它,并让它告诉我这是否是有效用户。
这是我希望看到的设置方式:
// client
function logged_in() {
return SomeServerMethodThatValidatesUserId(Session.get("user_id"));
}
Meteor.methods
似乎不符合要求,因为Meteor.call
执行异步回调。pub/sub 模型看起来更有希望,但从文档来看,我不太确定它是如何工作的。
似乎建议我应该this.set
从发布处理程序中调用以便在客户端上设置一些值,但我无法弄清楚这些值在哪里可用。
或者也许 pub/sub 模型也不适合这个,我还缺少另一种方式。任何建议表示赞赏!