Firestore安全规则基于地图值
如果允许用户根据用户的电子邮件地址在文档中读取文档,我想要存储它。 多个用户应该可以访问同一个文档。
根据文档 Firestore不允许查询阵列成员。 这就是为什么我要将用户的电子邮件地址存储在一个String-Bool Map中,并将电子邮件地址作为关键字。
对于下面的例子,我不使用电子邮件作为映射键,因为它已经不适用于基本的字符串。
数据库结构如下所示:
lists list_1 id: String name: String owner: E-Mail type: String shared: test: true
所有安全规则在这里列出:
service cloud.firestore { match /databases/{database}/documents { match /lists/{listId=**} { allow read: if resource.data.shared.test == true } } }
编辑:如果我使用match /lists/{listId}
而不是match /lists/{listId=**}
我的理解是,如果map shared[test]
值为true,则此安全规则应允许读取所有人。
为了完整起见:这是我正在使用的查询(Android上的Kotlin):
collection.whereEqualTo("shared.test", true).get() .addOnCompleteListener(activity, { task -> if (task.isSuccessful) { Log.i("FIRESTORE", "Query was successful") } else { Log.e("FIRESTORE", "Failed to query existing from Firestore. Error ${task.exception}") } })
我猜我不能从安全规则访问地图值。 那么,对于我的问题,将会有什么替代方案呢?
在Firestore规则引用中写道,可以像resource.data.property == 'property'
那样访问地图,那么我在做什么错了?
我和这里的一些人聊了一下你遇到的问题,这似乎是安全规则本身的一个问题。 本质上,问题似乎是特定于评估查询中的嵌套字段,比如你在做什么。
所以,基本上,你在做什么应该可以正常工作,而且你需要等待Firestore团队的更新才能使这个查询工作。 我会尽量记得在发生这种情况时更新这个答案。 对不起'回合!
- FirebaseDatabase根引用在事务中为空
- 转换字节码时出错 – DexException – Firebase身份验证
- 如何创建需要find目标文档的Firestore事务
- 用Kotlin将音频保存在Firebase上
- Firebase @Exclude with kotlin data class
- 如何从Firebase数据库检索数据并将其存储在ListArray <Class>中? – Kotlin
- 如何在Kotlin上使用Firebase UI数据库?
- 如何获取在Firestore数据库中的Android文档ID或名称传递到另一个活动?
- 如何处理iOS中的Firebase数据库错误? #AskFirebase