我可以在Cloud Firestore中仅添加一个集合吗?

时间:2017-11-09 21:58:53

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

我想将游戏事件和审核日志从我的应用程序写入Cloud Firestore。编写完成后,我不希望用户能够修改或删除这些事件/日志。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

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();
      }
   }
}

让我们分解最重要的部分。

功能:permission_granted()

function permission_granted() {
   return request.auth != null; // Change this to your logic.
}

这个只是一个占位符,但您想要限制插入新文档或读取集合中的现有文档。在这种情况下,它允许任何使用Firebase Auth登录的人 - >您可能希望它更具限制性。

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

匹配:根集合audit_log

match / 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函数,我们允许在集合中阅读,列出和创建新文档。