【发布时间】:2019-10-15 07:01:59
【问题描述】:
我的 Firestore 安全检查权限不足。
service cloud.firestore
{
match /databases/{database}/documents
{
match /events/{eventID}
{
allow read:
if get(/databases/$(database)/documents/events/$(eventID)/authorizations/$(request.auth.uid)).data.EVENT_READ == true;
}
}
}
get 文档在 firestore 数据库中硬编码,模拟器返回 true,但实际查询返回的权限不足。
我测试了授权子集合并将其移动到与用户集合相同的级别,并且它可以工作。我错过了什么吗?
补充测试:直接读取文档不会导致权限不足。我正在测试这是否是列表的问题,但据我所知 read 应该涵盖 get 和 list 在 firestore 安全规则中。
更新:列表似乎是这里的问题。我试图只用一个文档列出整个集合,结果导致权限不足。
作品:
this.angularFirestore.collection('events').doc(eventID).valueChanges();
不起作用(更新):
this.angularFirestore.collection('events', query => query.where('admins', 'array-contains', auth.uid)).valueChanges()
我的 Firestore 数据库:
/events/event1_id
- field 1: some string
- field 2: some string
- admins: array of uid strings
/authorizations/<uid> #uid for $(request.auth.uid)
- EVENT_READ: true
更新 2:更新了我尝试过的不起作用的查询字符串。有趣的是,如果我将 /authorizations 子集合移到与 /events 集合相同的级别,查询将不会失败。
【问题讨论】:
-
“但对于实际返回的权限不足” - 请编辑问题以显示您正在做的事情与您期望的方式不符。你在做什么应该被允许的查询?
标签: google-cloud-firestore firebase-security