#askfirebase firestore-防止在没有特定查询的情况下获取整个系列



我有一群学生。每个学生都有一个名字和分类。我的要求是:

  • 可以获取学生数据,然后查看他是哪个类(通过id(。
  • you can fetch a class的所有学生(classid查询(。
  • 不能列出没有classid滤镜的学生集合。
  • "经理"可以列出整个学生的收集和过滤学生的名字 classid

可以使用安全规则实现这一目标吗?

显然没有对此进行详细说明。

// Allow a query if the user is requesting less than or equal to 10 items
allow list: if request.query.limit <= 10;
// Allow a query starting at the 10th item
allow list: if request.query.offset == 10;
// Allow a query if it's grouped by user (e.g. user anonyous queries)
allow list: if request.query.groupBy['user'] == true;
// Only allow ascending queries on timestamps
allow list: if request.query.orderBy['timestamp'] == 'ASC';

编辑

所以以上对我不起作用,我联系了Google,他们说不支持查询功能,并且需要从文档中删除它。

再次编辑
因此,我终于提出了一个目前满足我的解决方案。这不是完美的想法,但它解决了问题。
我在没有classid的集合中添加了一个"虚拟学生",我添加了一个规则,如下所示:

match /students/{studentId} {
  allow get;
  allow list: if resource.data.keys().hasAny(['classId']);
}

现在满足了上述所有规则,但是创建了一个新的问题。当经理试图查询整个系列时,他可能会遇到这个虚拟学生。
我找不到解决这个问题的好方法,所以我要做的就是在所有学生上添加一个假人字段({a:true}(,除了虚拟人物外,当经理查询数据时,我还要添加一个条款where('a', '==', true)。这解决了我的问题,但这是一个丑陋的解决方案。如果有人有更好的解决方案,我很乐意听到它。

相关内容

最新更新