database - 我可以在 Cloud Firestore 中将集合设置为仅追加吗?

标签 database firebase firebase-security google-cloud-firestore database-security

我想将游戏事件和审核日志从我的应用写入 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 登录的任何人 -> 您可能希望它更具限制性。

它只返回 truefalse,我们稍后将使用它来实际执行。

匹配:根集合audit_log

匹配/audit_logs/{log} { ... }

这很简单,我们只是匹配有关名为 audit_logs 的根收集的任何请求。由于 {log} 片段,问题中的文档 ID 可通过 $(log) 获取。

阻止任何仅附加的修改

allow update,delete: if false;

这 2 个非追加写入方法是 updatedelete,因此这里我们普遍禁止任何移动和 Web SDK 执行它们。

允许其余的

allow read, create, list: if permission_granted();

最后,使用我们之前设置的 permission_granted 函数,我们允许在集合中读取、列出和创建新文档。

关于database - 我可以在 Cloud Firestore 中将集合设置为仅追加吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47212286/

相关文章:

firebase - Firebase-Dart过滤数据

github - 在 Github 上使用 Firebase 数据库上传项目是否安全?

android - Firebase:权限被拒绝 - setValue()

sql - 保存来自另一个表的行计数的表字段

database - GORM 中的复杂更新

javascript - 如何循环遍历 Firebase 文档以查找匹配文档,然后提取名称?

iOS Swift Firebase SDK 导入问题

mysql - 跨多个表搜索

java - flyway 4.0 java base回调afterValidate没有捕获钩子(Hook)

firebase-authentication - Firebase 存储安全规则 Playground "Simulated read denied"