我正在使用 Firebase Cloud Firestore 创建一个 Web 应用程序,我想编写我想象的安全规则,但我找不到关于这个主题的任何更好的文档,它总是很简单的事情,比如检查如果用户已登录。
所以我想要做的是检查客户想要阅读的文章是否有一个名为public的属性,设置为true。也许我可以检查请求的来源,以确保它来自我网站的网址?我想找到一种解决方案,允许在不需要用户登录的情况下进行阅读,而且安全性最低。
如果属性未定义,是否有可能返回 true ?我想把文章默认设为公开,但不知道怎么做。
答案 0 :(得分:1)
我不确定您是否可以只将您的域列入白名单,但是您几乎可以使用安全规则执行您需要的所有操作
<块引用>所以我想要做的是检查客户想要阅读的文章是否有一个名为public的属性,设置为true
allow read: if resource.data.yourPropertyName == "public"
<块引用>
我想找到一种无需用户登录即可阅读的解决方案
allow read: if true;
请记住,那些不应该用作过滤器,它们应该控制谁可以写/读东西
答案 1 :(得分:0)
正如 Frank 所说,您不能限制从特定域访问 Firestore。但是,因为您使用一些 api 密钥来调用您的 firebase 资源,you can restrict the use of this key 到特定域。您可以通过转到 GCP 凭据页面 --> 要限制的 API 密钥来执行此操作。从那里你可以限制如何将此密钥用于网站、应用程序等。
关于检查文章是否具有公共财产的其他问题,可以通过使用以下安全规则轻松完成:
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"
...
})