小编Mar*_*ler的帖子

如何在Firestore中一次创建/更新多个文档

是否可以仅使用一个请求在Firestore中存储多个文档?使用此循环可能但这会导致列表中的每个项目进行一次保存操作.

for (counter in counters) {
    val counterDocRef = FirebaseFirestore.getInstance()
            .document("users/${auth.currentUser!!.uid}/lists/${listId}/counters/${counter.id}")
    val counterData = mapOf(
            "name" to counter.name,
            "score" to counter.score,
    )
    counterDocRef.set(counterData)
}
Run Code Online (Sandbox Code Playgroud)

android firebase google-cloud-firestore

35
推荐指数
2
解决办法
2万
查看次数

从不同调用者的相对路径读取文件

我正在尝试从项目目录中的文件中读取。

我的问题是,根据调用者的不同,路径会发生变化。调用者发生了变化,因为我想对这段代码进行单元测试,而调用者不再是了Main.go

这就是我的项目结构:

项目结构

我尝试访问的代码specialChars.txt如下所示:

func RemoveSpecialChars(word string) string {
    file, err := ioutil.ReadFile("wordlists/specialChars.txt")
    [...]
}
Run Code Online (Sandbox Code Playgroud)

此代码适用于 start fromMain.go但不适用于 start from CleanupUtil_test.go。为了让它在测试中正常工作,我需要file, err := ioutil.ReadFile("../wordlists/specialChars.txt")

我找到了这样的答案: https: //stackoverflow.com/a/32163888/2837489 _, filename, _, ok := runtime.Caller(0),这显然也取决于调用者。

是否可以独立于调用函数获取项目根路径?还是我的代码设计有问题?我应该将文件路径传递给函数吗?

go

13
推荐指数
1
解决办法
7833
查看次数

基于映射值的Firestore安全规则

如果允许用户根据用户的电子邮件地址阅读文档中的文档,我想存储.多个用户应该可以访问同一文档.

根据文档, Firestore不允许查询数组成员.这就是为什么我将用户电子邮件地址存储在String-Bool Map中,并将电子邮件地址作为密钥.

对于以下示例,我没有使用电子邮件作为映射键,因为它已经不能使用基本字符串.

数据库结构如下所示:

lists
  list_1
    id: String
    name: String
    owner: E-Mail
    type: String
    shared:
      test: true
Run Code Online (Sandbox Code Playgroud)

此处列出了所有安全规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /lists/{listId=**} {
        allow read: if resource.data.shared.test == true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果我使用match /lists/{listId}而不是,它也不起作用match /lists/{listId=**}

我理解的是,如果地图中的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}")
            }
        })
Run Code Online (Sandbox Code Playgroud)

我猜我无法访问安全规则中的地图值.那么什么是我的问题的替代解决方案?

Firestore规则参考中 …

firebase firebase-security google-cloud-firestore

13
推荐指数
1
解决办法
3100
查看次数

用于在用户之间共享文档的Firestore数据库规则和结构

我正在尝试创建一个允许用户在列表上进行协作的应用程序.需要邀请每个用户才能在列表中工作.

我构建了这样的数据(基于这篇博文).如果需要,也可以改变这种结构.

list
  list_1:
    users:
      owner:
        owner@company.com: true
      shared:
        user@company.com: true
        user2@company.com: true
    id
    name
    items:
      item_1:
        id:
        name:
      ...
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标:每个人都应该能够创建列表.然后,他们的创建者将成为创建列表的所有者.只有"共享"文档中的所有者和用户才能读取和写入此列表.

我想权限设置看起来应该是这样的.但这不起作用:

service cloud.firestore {
  match /databases/{database}/documents {
    match /lists/{listId}/{anything=**} {
        allow read, write: if !exists(resource.data.users.owner) ||
                               resource.data.users.owner == request.auth.token.email ||
                               request.auth.token.email in resource.data.users.shared
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

firebase firebase-security google-cloud-firestore

6
推荐指数
1
解决办法
1838
查看次数