【发布时间】:2018-04-23 01:31:06
【问题描述】:
我想将游戏事件和审核日志从我的应用写入 Cloud Firestore。一旦写入,我不希望用户能够修改或删除这些事件/日志。
我该怎么做?
【问题讨论】:
标签: database firebase firebase-security google-cloud-firestore database-security
我想将游戏事件和审核日志从我的应用写入 Cloud Firestore。一旦写入,我不希望用户能够修改或删除这些事件/日志。
我该怎么做?
【问题讨论】:
标签: database firebase firebase-security google-cloud-firestore database-security
Cloud Firestore 中的规则可以非常简单地从移动和网络客户端将集合甚至整个数据库创建为仅附加系统。
以下是将根集合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();
}
}
}
让我们分解最重要的部分。
function permission_granted() {
return request.auth != null; // Change this to your logic.
}
这只是一个占位符,用于限制插入新文档或读取集合中的现有文档。在这种情况下,它允许使用 Firebase Auth 登录的任何人 -> 您可能希望它更具限制性。
它只返回true 或false,我们稍后将使用它们来实际执行。
匹配 /audit_logs/{log} { ... }
这很简单,我们只是匹配任何关于名为audit_logs 的根收集的请求。由于 {log} 部分,问题中的文档 ID 可通过 $(log) 获得。
allow update,delete: if false;
不是仅追加的 2 种写入方法是 update 和 delete,因此我们在这里普遍禁止任何移动和网络 SDK 执行它们。
allow read, create, list: if permission_granted();
最后,使用我们之前设置的permission_granted 函数,我们允许在集合中读取、列出和创建新文档。
【讨论】: