gpt4 book ai didi

firebase - Cloud Firestore 中的规则如何级联?

转载 作者:行者123 更新时间:2023-12-04 00:32:14 25 4
gpt4 key购买 nike

我正在尝试学习使用 Google Cloud Firestore 来存储和保护一些简单的数据,因此我开始编写一些基本规则来验证从 API 传递的数据是否合理。

我最初的想法是每条规则都会被评估,如果任何一条规则失败,请求就会失败,但我发现那些不匹配规则的请求仍然成功。有人能解释一下如何为子集合创建更强大的安全规则吗?

这是我当前的规则集:

service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
allow write: if request.auth.uid != null;
}
match /projects {
allow write: if resource.data.keys().hasAll(['title', 'description']);
}
}
}

最佳答案

在 Firestore 规则中,如果任何 allow 授予请求,则允许该请求。应用于任何给定请求的 allow 语句都是与资源名称匹配的 match block 。

由于 match/{document=**} 模式与 match/projects 模式重叠,因此可以写入 projects文档只需通过身份验证即可,例如request.auth.uid != null。这可能不是本意。

match/projects 是针对 /databases/*/documents/projects 的固定长度匹配,而 match/{document=**} 将匹配任何以 /databases/*/documents 开头的文档名称。 ** 的存在表示零个或多个附加路径。

一般来说,避免 match 模式中的重叠是一种很好的做法。如果您需要编写一个匹配大多数事物但为特定路径划分异常(exception)的规则,则需要如下:

service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
// allow writes to anything except the 'projects' document.
allow write: if request.auth.uid != null
&& /databases/$(database)/documents/$(document)
!= /databases/$(database)/documents/projects
}
match /projects {
// allow _authenticated_ writes to the projects document if they
// have the proper form.
allow write: if request.auth.uid != null
&& resource.data.keys().hasAll(['title', 'description']);
}
}
}

关于firebase - Cloud Firestore 中的规则如何级联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49471945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com