我有一群学生。每个学生都有一个名字和分类。我的要求是:
- 您可以获取学生数据,然后查看他是哪个类(通过id(。
- you can fetch a class的所有学生(classid查询(。
- 您不能列出没有classid滤镜的学生集合。
- "经理"可以列出整个学生的收集和过滤学生的名字 classid
可以使用安全规则实现这一目标吗?
编辑 所以以上对我不起作用,我联系了Google,他们说不支持查询功能,并且需要从文档中删除它。 再次编辑 现在满足了上述所有规则,但是创建了一个新的问题。当经理试图查询整个系列时,他可能会遇到这个虚拟学生。// 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';
因此,我终于提出了一个目前满足我的解决方案。这不是完美的想法,但它解决了问题。
我在没有classid的集合中添加了一个"虚拟学生",我添加了一个规则,如下所示:match /students/{studentId} {
allow get;
allow list: if resource.data.keys().hasAny(['classId']);
}
我找不到解决这个问题的好方法,所以我要做的就是在所有学生上添加一个假人字段({a:true}(,除了虚拟人物外,当经理查询数据时,我还要添加一个条款where('a', '==', true)
。这解决了我的问题,但这是一个丑陋的解决方案。如果有人有更好的解决方案,我很乐意听到它。