Ilj*_*lja 3 firebase firebase-security google-cloud-firestore
我的数据库(firestore)中有以下字符集合结构
/characters/{uid}
- username: string
- clan: string
- mana: number
- health: number
etc...
Run Code Online (Sandbox Code Playgroud)
我正在尝试/characters/{uid}通过以下逻辑找出安全规则
service cloud.firestore {
match /databases/{database}/documents {
// Characters
match /characters/{characterID} {
allow create: if isValidUsername();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里的函数isValidUsername检查各种内容,如长度、特殊字符等......但我无法弄清楚的一件事是如何检查函数内部
确保它request.resource.data.username是唯一的,即不存在于任何其他/characters收藏文档中。
TL;DR:只有通过创建额外的集合才能强制执行唯一性。
在您当前的结构中,要了解用户名是否唯一,您需要阅读每个文档。这是非常低效的,最重要的是,在安全规则中这是不可能的,因为它们每个规则只能读取几个文档。
诀窍是创建一个额外的集合usernames,其中每个用户都有一个文档,但现在每个文档的键/ID 是用户名。有了这样的集合,你就可以检查某个文档是否存在,这是安全规则中的一个原始操作。
| 归档时间: |
|
| 查看次数: |
990 次 |
| 最近记录: |