Tag: firebase security

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) { […]

Firestore数据库规则:查询的权限

我试图查询基于字段的文档。 由于这个领域,我有权限阅读这个文件: match /lists/{list=**} { allow read: if resource.data.name == 'MyDocument' } 如果我试图直接检索这个文档,它是成功的(使用Kotlin的Android客户端): val doc = db.document("lists/acaa0247-eccd-4ff0-b986-7f8b6187e45f") doc.get().addOnCompleteListener { task -> if (task.isSuccessful) { // here it works println("This Works") } else { println("Failed") } } 但是当我查询它(或只是试图获取集合中的所有文档),我得到一个权限被拒绝的异常: val collection = db.collection("lists") collection.get().addOnCompleteListener(activity, { task -> if (task.isSuccessful) { println("Should work") } else { // Here […]