java - Firestore 安全规则 : use array_contains to determine authorization

标签 java google-cloud-firestore firebase-security

我可以在 Firebase 安全规则中使用等效于 array_contains 的东西吗?

我有一个 Event 类(对应于 events 集合中的 Event 文档)。每个文档都有一个 subscribers 列表/数组,其中包含应该能够查询此事件的所有用户的 UID:

{
    .
    "subscribers" : ["uidA", "uidB", "uidC"],
    .

}

更明确地说,用户应该能够运行查询:

db().collection("events").whereArrayContains("subscribers", "uidC");

如何编写此安全规则?

我试过:

match/events/{eventId} {
    allow list: if request.auth.uid in resource.data.subscribers;
}

模拟器告诉我访问将被拒绝。

使用这样的函数也会报告访问被拒绝:

function isSubscriber() {
    return resource.data.subscribers.includes(request.auth.uid);
}

match/events/{eventId} {
    allow list: if isSubscriber();
}

最佳答案

感谢@DougStevenson 的建议,我使用了规则:

match/events/{eventId} {
    allow list: if request.auth.uid in resource.data.subscribers;
}

然后让我的 Android 开发人员实际尝试从他的设备进行查询,结果成功了!

不要盲目相信 Firestore 安全规则的模拟器,它可能与现实不同!!!模拟器的代码可能与为实际评估生产规则而部署的代码不同,因此结果可能略有不同。

Firebase 安全规则文档:https://firebase.google.com/docs/reference/rules/rules.List (显然它也适用于 Firestore)。

关于java - Firestore 安全规则 : use array_contains to determine authorization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52773084/

相关文章:

Java 如何将 "Logical And Operator"分配给一个 "boolean variable"

java - 如何在不使用 String Buffer 类的 Replace() 方法的情况下替换字符串中的字符?

javascript - 如何在没有异步 Promise 的情况下编写 Vuex 突变

javascript - 时间戳验证 Firestore

firebase - 有没有办法在 Firebase 用户中锁定 displayName?

java - Java 中的工作线程

java - 你能帮我计算一下这个算法的时间复杂度吗?

Firebase 安全规则跨项目

firebase - Flutter 将数据列表保存到 FireStore

firebase - Firestore 安全规则 - 批量读取计数