【发布时间】:2019-03-18 17:52:02
【问题描述】:
我的 Firestore 数据库中有一个名为 reports。
在我的 Angular 应用中,我只允许在单个查询中获取 10 个结果:
angularFirestore.collection('reports', ref => ref.limit(10));
正如预期的那样,该应用最多显示 10 个结果。
为了确保 Firestore 不会允许任何更大的限制,我编写了以下规则:
match /reports/{reportId} {
allow list: if request.query.limit && request.query.limit <= 10
}
由于“权限缺失或权限不足”,应用无法从 Firestore 获取数据。
为了确保问题出在这句话上,我将以下规则更改为:
match /reports/{reportId} {
allow list;
}
它奏效了。
然后我试着把这条规则写在“婴儿步骤”中,所以我写了:
match /reports/{reportId} {
allow list: if request.query.limit;
}
令人惊讶的是它失败了。现在,我的问题是为什么request.query.limit 是一个虚假值,而我在我的应用程序中明确写了.limit(10)?毕竟,当我写allow list; 时,我得到了 10 个文件,而且还没有超过。
编辑:
看起来即使我写了以下规则,它也失败了:
match /reports/{reportId} {
allow list: request.query;
}
【问题讨论】:
-
一旦你在“allow”之后开始说“read”、“list”、“write”、“update”、“delete”以外的任何内容,你就在制定一条永远不会被允许的规则是的。
-
@DougStevenson 写在这里是错误的。我已经更新了我的问题。反正我已经找到答案了(往下看)
标签: google-cloud-firestore firebase-security