首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >云修复安全规则开发模式

云修复安全规则开发模式
EN

Stack Overflow用户
提问于 2019-09-17 10:14:56
回答 4查看 2.1K关注 0票数 3

我们正在开发一个基于云修复的Android应用程序。

现在,我们已经发布了应用程序的生产,我们继续增加更多的功能,变化迫使我们添加/更改Firestore安全规则。

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

我在docs中看到Firestore有一些仿真器,但我不明白他是否可以帮助,或者它只用于单元测试,还有一个模拟器可以在草案模式下测试单个请求,但最终我们需要测试应用程序的功能。

换句话说,在将应用程序应用于所有用户之前,是否有办法更改安全规则并对其进行测试?

另外,对于那些在生产中使用Firebase的人,我也有一些疑问:

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

也许我漏掉了一些重要的东西。

提前谢谢。

EN

回答 4

Stack Overflow用户

发布于 2019-09-17 12:33:49

为了测试安全规则,您可能需要查看Firebase模拟器(Beta):

防火墙仿真器 Firebase模拟器使完全验证应用程序的行为和验证Firebase安全规则配置变得更加容易。使用Firebase模拟器在本地环境中运行和自动化单元测试。

样本测试:

代码语言:javascript
复制
firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());

assertFails(pr: Promise) => Promise 此方法返回一个承诺,如果输入成功,该承诺将被拒绝;如果输入被拒绝,则返回成功承诺。如果数据库读取或写入失败,则使用此方法断言。

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

票数 1
EN

Stack Overflow用户

发布于 2019-09-26 10:09:44

我使用了Bolt,一个超集,它将转到JSON安全规则。这看起来比通过Firebase UI使用标准规则和模拟器要好得多,特别是当应用程序增长时规则变得越来越大和复杂时,因为Bolt允许您创建函数来重用用于读/写/验证逻辑的通用代码。

螺栓文档:

代码语言:javascript
复制
https://github.com/FirebaseExtended/bolt/blob/master/docs/guide.md

测试指令

代码语言:javascript
复制
https://github.com/FirebaseExtended/bolt/issues/80

在回答我们的问题时,我们将对这里进行详细的解释,以便为您的开发和生产环境支持独立的Firebase项目。

票数 1
EN

Stack Overflow用户

发布于 2019-11-08 09:03:55

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

通过这种方式,我可以在不影响生产的情况下发布对开发模式的新更改,所有的工作都很好--从开发到生产复制规则,并删除“`dev”前缀。

代码语言:javascript
复制
    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);
                             
        }  
    } 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57972089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档