【问题标题】:Write Cloud Firestore security rules编写 Cloud Firestore 安全规则
【发布时间】:2021-01-10 11:16:38
【问题描述】:

我正在使用 Firebase Cloud Firestore 创建一个 Web 应用程序,我想编写我想象中的安全规则,但我找不到关于这个主题的任何更好的文档,它总是很简单的事情,比如检查如果用户已登录。

所以我要做的是检查客户想要阅读的文章是否有一个名为public的属性,设置为true。也许我可以检查请求的来源,以确保它来自我网站的 url ?我想找到一种解决方案,允许在不需要用户登录的情况下阅读,而且安全性最低。

如果属性未定义,是否可以返回 true ?我想把文章默认设为公开,但我不知道怎么做。

【问题讨论】:

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


【解决方案1】:

我不确定您是否可以仅将您的域列入白名单,但您可以使用安全规则完成几乎所有需要的操作

所以我要做的是检查客户要阅读的文章是否有一个名为public的属性,设置为true

  allow read: if resource.data.yourPropertyName == "public" 

我想找到一种无需用户登录即可阅读的解决方案

allow read: if true;

请记住,这些不应该用作过滤器,它们应该控制谁可以写/读东西

【讨论】:

  • 如果属性 public 未定义,我可以返回 true 吗?我想把文章默认设为公开
【解决方案2】:

正如弗兰克所说,您不能限制从特定域访问 Firestore。但是,因为您使用一些 api 密钥来调用您的 firebase 资源,you can restrict the use of this key 到特定域。您可以通过转到 GCP 凭据页面 --> 您要限制的 API 密钥来执行此操作。从那里您可以限制如何将此密钥用于网站、应用程序...等。

关于检查 artice 是否具有公共财产的其他问题,可以使用以下安全规则轻松完成:

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

    
    match /articles/{articleId} {
       // I chose visibility as a prop here but it can be anything
       allow read: if resource.data.visibility == "public" 
    }
  }
}

要将文章默认设置为公开,您可以在创建文章文档本身时通过客户端应用执行此操作,方法是设置一个属性,让我们说“可见性”为公开。在您的应用中出现这样的内容:

// Add a new document with a generated id.
db.collection("articles").add({
    visibility: "public"
    ...
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2021-04-21
    • 2020-11-27
    • 2021-11-22
    • 2020-08-21
    相关资源
    最近更新 更多