Cloud Firestore安全规则文档示例

时间:2018-08-17 20:56:33

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

此文档页面:Writing conditions for Cloud Firestore Security Rules,内容如下:

  

另一个常见的模式是确保用户只能读写自己的数据

并提供以下示例:

service cloud.firestore {
  match /databases/{database}/documents {
    // Make sure the uid of the requesting user matches name of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /users/{userId} {
      allow read, update, delete: if request.auth.uid == userId;
      allow create: if request.auth.uid != null;
    }
  }
}

我不明白为什么create规则的定义条件与其余if request.auth.uid == userId的条件不同,而是用if request.auth.uid != null定义的。据我了解,使用此规则,任何用户都可以在users内创建任何文档,但是除非它与自己的uid相匹配,否则不能对其进行任何操作。那么为什么要允许它呢?

1 个答案:

答案 0 :(得分:0)

让我们谈一谈可以通过用户身份验证实施的非常基本安全规则:

allow read, update, delete: if request.auth.uid != null;
allow create: if request.auth.uid != null;

,任何用户都可以删除其他人创建的文档。因此,为了对其进行限制/控制,我们按照提供的代码段所示实现。

service cloud.firestore {
  match /databases/{database}/documents {
    // Make sure the uid of the requesting user matches name of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /users/{userId} {
      allow read, update, delete: if request.auth.uid == userId;
      allow create: if request.auth.uid != null;
    }
  }
}

代码段只是一个示例使用案例,出于参考目的使用了不同的条件,因为这是一个教程/指南,因此Firebase团队尝试使尽可能多的条件适合代码段。

您当然可以执行allow create: if request.auth.uid == userId;,以严格限制该特定用户使用。

我希望它能给您一些想法!