我正在尝试在 Meteor 中创建文档级别的访问控制系统,但我似乎缺少如何阻止用户获取文档。
我已阅读有关 collection.allow
和 collection.deny
的文档。通过这些对象,我们可以控制“谁”可以更新
、删除
和插入
。问题是 Meteor 似乎没有为 fetch 操作提供类似的功能。 拒绝未经授权的用户阅读文档的正确方法是什么?
额外要求:这需要在服务器端进行,以便我们不会通过网络向未经授权的用户泄露文档。
最佳答案
一旦收集数据到达客户端,就无法拒绝读取该数据。理论上,没有办法在客户端上实际执行任何,因为用户可以修改代码。但是,您可以强制发布哪些文档。
发布函数可以处理任意复杂的授权规则。下面是一个简单的示例,我们希望仅将 Messages
集合中的文档发布给属于给定组成员的用户:
Meteor.publish('messagesForGroup', function(groupId) {
check(groupId, String);
var group = Groups.findOne(groupId);
// make sure we have a valid group
if (!group)
throw new Meteor.Error(404, 'Group not found');
// make sure the user is a member
if (!_.contains(group.members, this.userId))
throw new Meteor.Error(403, 'You are not a member of the group');
return Messages.find({groupId: groupId});
});
关于javascript - 如何拒绝获取操作的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32446266/