Cloud Firestore安全规则开发模式

问题描述 投票:1回答:3

我们正在开发基于Cloud Firestore的Android应用。

现在,我们已经将该应用程序发布到生产环境中,并且我们将继续添加更多功能,这些更改迫使我们添加/更改Firestore安全规则。

问题是如何在将规则发布给所有用户之前如何使用新的安全规则测试应用程序?

我在文档中看到Firestore有一些模拟器,但是我不知道他是否可以提供帮助或仅用于单元测试,还有一个模拟器可以在草稿模式下测试单个请求,但是最终我们需要测试应用程序的功能手动

换句话说,是否有一种方法可以更改安全规则并在将其应用到所有用户之前对其进行测试?

[我也对在生产中使用Firebase的人有疑问:

  1. 我想您的数据库已拆分用于开发和生产,是否将其拆分到同一项目中或使用2个google-services.json文件创建2个项目,如果在同一项目中使用,如何处理两个版本的安全规则的更改?
  2. 应用程序版本和数据结构之间可能有所变化,但是规则只有一个版本,某些规则将与另一应用程序版本不兼容,您如何处理这种情况?有什么方法可以使特定的应用程序发布与特定的安全规则匹配?

也许我缺少有关Firestore的重要信息。

提前感谢。

android firebase firebase-security-rules
3个回答
1
投票

您可能希望研究Firebase模拟器(Beta)以测试安全规则:

Firebase模拟器

Firebase模拟器使轻松完成验证您应用的行为并验证Firebase安全规则配置。使用Firebase模拟器来运行和自动化单元在本地环境中进行测试。

样本测试:

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());

assertFails(pr: Promise) => Promise

此方法返回一个promise,如果输入成功,则将被拒绝或如果输入被拒绝则成功。使用此断言是否数据库读取或写入失败。

更多在这里:https://firebase.google.com/docs/rules/unit-tests


1
投票

我使用了Bolt,它是可转换为JSON安全规则的超集。与通过Firebase UI使用标准规则和模拟器相比,这似乎是一个更好的选择,尤其是当规则随着应用程序的增长而变得又大又复杂时,因为Bolt允许您创建函数以将通用代码重复用于读/写/验证逻辑。

螺栓文档:

https://github.com/FirebaseExtended/bolt/blob/master/docs/guide.md

测试说明

https://github.com/FirebaseExtended/bolt/issues/80

还回答了我们的问题,给出了详细说明here,以支持针对您的开发和生产环境的单独Firebase项目。


0
投票

[不幸的是,我没有找到官方的解决方案,我使用前缀dev-将安全规则划分为开发和生产,并将数据库划分为开发和生产,因此调试模式可与开发数据库一起使用并匹配开发安全规则。当然,在运行时需要为每个根集合添加前缀。

这样,我可以在不影响生产的情况下发布对开发模式的新更改,我都可以正常工作,我可以将规则从开发复制到生产中,并删除`dev'前缀。

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

            //production rules ********************************************************************
        match /data/{user}/{doc=**} {
          allow read, write: if request.auth.uid == user || hasPerrmision(request.auth.token.email);


        //development rules ********************************************************************
        match /dev-data/{user}/{doc=**} {
          allow read, write: if request.auth.uid == user || hasPerrmision(request.auth.token.email);

        }  
    } 
}
© www.soinside.com 2019 - 2024. All rights reserved.