Firebase安全规则到特定字段

时间:2018-07-26 20:50:56

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

我开始使用Cloud Firestore,并且对安全规则有疑问。我需要知道是否可以为特定字段设置写权限。例如,我有一个名为“ tickets”的集合,每个文档都是:

ticket\
    id: "firebaseIdklnalskdla",
    status: "in_progress"
    creation_date: "28/08/2018"

我只需要对“状态”字段指定“写”权限。有可能吗?

3 个答案:

答案 0 :(得分:3)

Firestore确实没有按域安全规则。规则仅适用于整个文档。因此,如果某人可以阅读文档,则他们始终可以阅读文档的所有字段。同样,如果某人可以编写文档,则他们可以编写文档的所有字段。

您可以做的一件事是,当某人尝试编写文档时,如果该文档的目标是任何不应写的字段,则拒绝该写操作,这涉及检查请求的大小和内容。您将使用request.resource检查写入的内容,然后使用其data属性检查其是否仅包含可写字段。因此,类似这样的内容可以查看更新是否仅包含有效的可写字段:

allow update: if request.resource.data.size == 1 && request.request.data['fieldname'] != null

您的规则可能更复杂,或者需要不同的策略来检查有效写入。

另一种更常见的做法是将文档分成两个集合,一个集合包含可写字段,另一个集合包含只读字段。

答案 1 :(得分:0)

安全规则可能看起来像这样(未经测试):

service cloud.firestore {
  match /databases/{database}/documents {

  // here one can limit per user and other conditions, not per field. 
  match /tickets/{ticket} {
      allow update: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
  }

}

Structuring Cloud Firestore Security Rules对此进行了说明,并且

同时还有一个Firestore Security Rules Simulator

答案 2 :(得分:0)

Firebase团队提供了一个非常有趣的说明性视频,他们在其中谈论这种情况:https://youtu.be/8Mzb9zmnbJs?t=1313 创建文档后,您可以设置实际上可以更改的字段的限制。