我想将游戏事件和审核日志从我的应用写入 Cloud Firestore。一旦写入,我不希望用户能够修改或删除这些事件/日志。
我该怎么做?
最佳答案
Cloud Firestore 中的规则使得从移动和 Web 客户端将集合甚至整个数据库制作到仅附加系统中变得非常简单。
示例
下面是一组规则,可将根集合 audit_logs
转换为仅追加集合。
service cloud.firestore {
match /databases/{database}/documents/ {
function permission_granted() {
return request.auth != null; // Change this to your logic.
}
match /audit_logs/{log} {
allow update,delete: if false;
allow read, create, list: if permission_granted();
}
}
}
让我们分解最重要的部分。
函数:permission_granted()
function permission_granted() {
return request.auth != null; // Change this to your logic.
}
这只是一个占位符,用于限制插入新文档或读取集合中的现有文档。在本例中,它允许使用 Firebase Auth 登录的任何人 -> 您可能希望它更具限制性。
它只返回 true
或 false
,我们稍后将使用它来实际执行。
匹配:根集合audit_log
匹配/audit_logs/{log} { ... }
这很简单,我们只是匹配有关名为 audit_logs
的根收集的任何请求。由于 {log}
片段,问题中的文档 ID 可通过 $(log)
获取。
阻止任何仅附加的修改
allow update,delete: if false;
这 2 个非追加写入方法是 update
和 delete
,因此这里我们普遍禁止任何移动和 Web SDK 执行它们。
允许其余的
allow read, create, list: if permission_granted();
最后,使用我们之前设置的 permission_granted
函数,我们允许在集合中读取、列出和创建新文档。
关于database - 我可以在 Cloud Firestore 中将集合设置为仅追加吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47212286/