我有一批学生。每个学生都有一个名字和classId。 我的要求是:
可以使用安全规则来实现吗?
答案 0 :(得分:0)
显然,这些指南并未对此进行详细说明,但在request.query 引用中它确实如此:
// 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';
击> <击> 撞击> 编辑
所以上述内容对我没有用,我联系了谷歌,他们说不支持查询功能,他们需要将其从文档中删除。
再次编辑
所以我终于提出了一个满足我现在的解决方案。这不是完美的想法,但它解决了这个问题
我加了一个假的学生&#34;没有classId的集合,我添加了一个规则如下:
match /students/{studentId} {
allow get;
allow list: if resource.data.keys().hasAny(['classId']);
}
现在满足了上述所有规则,但创建了一个新问题。当经理试图查询整个集合时,他可能会遇到这个虚拟学生
我无法找到解决这个问题的好方法,所以我必须做的就是在所有学生中添加一个虚拟字段({a:true}),除了虚拟的一个,当经理查询数据时,我还添加了where子句where('a', '==', true)
。这解决了我的问题,但它是一种丑陋的解决方案。如果有人有更好的解决方案,我会很高兴听到它。