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团队的更新才能使这个查询工作。 我会尽量记得在发生这种情况时更新这个答案。 对不起'回合!