我正在使用Meteor
创建一个Web应用程序。
正在处理的问题是我有一个名为 Books
的集合,我希望它仅对登录用户可用,而对匿名用户不可用。
这就是我所做的:
if (Meteor.userId()) Meteor.subscribe('Books');
但这不是最好的解决方案,因为匿名用户仍然可以通过打开浏览器控制台并调用Meteor.subscribe('Books');
来获取Books
集合信息。
不幸的是,这是我迄今为止能想到的唯一解决方案。我听说过 Meteor 的allow
和deny
,但它们似乎只影响用户在集合上插入、更新或删除的时间(不阻止用户订阅集合)。
可以将订阅限制为从服务器端登录的用户,如下所示:
摘自《流星与安全:直接记录》(Meteor & Security: Set the Record Straight by Sacha Greif):
仅在用户登录时发布帖子:
Meteor.publish('posts', function() { if(this.userId){ return Posts.find(); } });
在您的情况下,您需要将posts
更改为 books
,正确大写以匹配其他代码。
这将导致匿名时手动尝试订阅为空。