允许基于映射键的访问
Allowing access based on mapped key
这是一个简单而常见的安全规则用例,但无法使其正常工作。
我的 Firestore(不是 RTDB)上有一个文档 orgs/fooOrg
,它包含一个对象
{
"members": {
"fooUser": true
}
}
应用的规则是
service cloud.firestore {
match /databases/{database}/documents {
match /orgs/{orgId} {
allow read: if "fooUser" in resource.data.members;
}
}
}
我希望 orgs
集合中的所有文档都应该能够被读取;然而,服务器说 Error: Missing or insufficient permissions
作为 运行
的结果
firebase.firestore().doc('orgs/fooOrg').get()
在浏览器上(使用 v4.5.0 和 v4.5.1)。甚至
allow read: if resource.data.members["fooUser"] == true;
也失败了。出了什么问题?
根据我的理解,这应该根据这个文档工作
https://firebase.google.com/docs/firestore/security/secure-data#evaluating_documents_currently_in_the_database
我相信它像一周前一样工作。突然间,我的工作代码开始产生错误,所以我写了这个 MCVE 并在几个不同的项目上进行了测试。
此外,我在下面发现了类似的问题,但与它们有点不同,所以不确定是否是同一个原因(Firestore 上的一个错误)
(我的情况,即使得到一个简单的文档也失败了)
Firestore read rules with self condition
(这个案例使用了一个map的值。我的案例,使用了一个key)
现在好像不用改代码就解决了。没有公告,但似乎 Firestore 方面修复了一些问题。
这是一个简单而常见的安全规则用例,但无法使其正常工作。
我的 Firestore(不是 RTDB)上有一个文档 orgs/fooOrg
,它包含一个对象
{
"members": {
"fooUser": true
}
}
应用的规则是
service cloud.firestore {
match /databases/{database}/documents {
match /orgs/{orgId} {
allow read: if "fooUser" in resource.data.members;
}
}
}
我希望 orgs
集合中的所有文档都应该能够被读取;然而,服务器说 Error: Missing or insufficient permissions
作为 运行
firebase.firestore().doc('orgs/fooOrg').get()
在浏览器上(使用 v4.5.0 和 v4.5.1)。甚至
allow read: if resource.data.members["fooUser"] == true;
也失败了。出了什么问题?
根据我的理解,这应该根据这个文档工作 https://firebase.google.com/docs/firestore/security/secure-data#evaluating_documents_currently_in_the_database
我相信它像一周前一样工作。突然间,我的工作代码开始产生错误,所以我写了这个 MCVE 并在几个不同的项目上进行了测试。
此外,我在下面发现了类似的问题,但与它们有点不同,所以不确定是否是同一个原因(Firestore 上的一个错误)
Firestore read rules with self condition (这个案例使用了一个map的值。我的案例,使用了一个key)
现在好像不用改代码就解决了。没有公告,但似乎 Firestore 方面修复了一些问题。