Tri*_*ton 3 firebase firebase-security google-cloud-firestore
我正在尝试学习使用 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']);
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
在 Firestore 规则中,如果有任何allow批准请求,则允许该请求。allow应用于任何给定请求的语句都是match与资源名称匹配的块。
由于match /{document=**}模式与模式重叠match /projects,因此可以projects简单地通过身份验证来写入文档,例如request.auth.uid != null。这可能不是本意。
的match /projects固定长度对匹配/databases/*/documents/projects,而match /{document=**}这开始于将匹配任何文档名称/databases/*/documents。的存在**表示零个或多个附加路径。
一般来说,避免match模式重叠是一种很好的做法。如果您需要编写一个匹配大多数事物但为特定路径创建例外的规则,则需要如下所示:
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']);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
961 次 |
| 最近记录: |