如何拒绝获取操作的访问权限

时间:2015-09-07 21:29:25

标签: javascript meteor

我试图在Meteor的文档级别创建一个访问控制系统,我似乎不知道如何阻止用户获取文档。

我已阅读collection.allowcollection.deny周围的文档。通过这些对象我们可以控制"谁"可以updateremoveinsert。问题是Meteor似乎没有为fetch操作提供类似的功能。 拒绝未经授权的用户阅读文档的正确方法是什么?

额外要求:这需要在服务器端进行,因此我们不会通过网络向未经授权的用户泄露文档。

2 个答案:

答案 0 :(得分:1)

1)从您的应用中删除autopublish个包。

2)创建您自己的发布并拒绝未经授权的用户访问

Meteor.publish("userData", function () {
    if (this.userId) { // Check user authorized
        return MyCollection.find(); // Share data
    } else {
        this.ready(); // Share nothing
    }
});

答案 1 :(得分:1)

一旦到达客户端,就无法拒绝对集合数据的读取。理论上,由于用户可以修改代码,因此无法在客户端上实际执行任何。但是,您可以强制执行哪些文档发布。

发布功能可以处理arbirtary复杂性的授权规则。这是一个简单的示例,我们希望将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});
});