Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 云Firestore安全规则开发模式_Android_Firebase_Firebase Security - Fatal编程技术网

Android 云Firestore安全规则开发模式

Android 云Firestore安全规则开发模式,android,firebase,firebase-security,Android,Firebase,Firebase Security,我们正在开发基于云Firestore的Android应用程序 现在,我们已经将该应用程序发布到生产环境中,并继续添加更多功能,这些更改迫使我们添加/更改Firestore安全规则 问题是,在向所有用户发布新的安全规则之前,如何使用新的安全规则测试应用程序 我在文档中看到Firestore有一些模拟器,但我不知道他是否能提供帮助,或者它只用于单元测试,还有一个模拟器可以在草稿模式下测试单个请求,但最终我们需要手动测试应用程序的功能 换句话说,在将应用程序应用于所有用户之前,是否有办法更改安全规则并

我们正在开发基于云Firestore的Android应用程序

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

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

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

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

此外,我还向在生产中使用Firebase的人提出一些问题:

  • 我猜您的数据库是为了开发和生产而拆分的,您是将其拆分到同一个项目中还是使用2个google-services.json文件创建2个项目,如果您在同一个项目中使用,如何处理两个版本的安全规则的更改
  • 应用程序版本和数据结构之间可能会有更改,但只有一个版本的规则,某些规则将与其他应用程序版本不兼容,您如何处理这种情况?有没有办法将特定的应用程序版本与特定的安全规则相匹配
  • 也许我错过了Firestore的一些重要信息


    提前感谢。

    您可能需要查看Firebase模拟器(测试版)以测试安全规则:

    Firebase模拟器

    https://github.com/FirebaseExtended/bolt/issues/80
    
    Firebase仿真器使完全使用Firebase仿真器变得更容易 验证应用程序的行为并验证Firebase安全规则 配置。使用Firebase仿真器运行和自动化单元 在本地环境中进行测试

    样本测试:

    firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    
    assertFails(pr:Promise)=>Promise

    此方法返回一个承诺,如果输入成功,该承诺将被拒绝 或者,如果输入被拒绝,则会成功。使用此命令可以断言 数据库读取或写入失败


    更多信息:

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

    螺栓文档:

    https://github.com/FirebaseExtended/bolt/blob/master/docs/guide.md
    
    测试说明

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

    另外,为了回答我们的问题,我们提供了一个详细的解释,以支持针对您的开发和生产环境的独立Firebase项目。

    不幸的是,我没有找到正式的解决方案,我使用prefix
    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);
    
            }  
        } 
    }
    

    你试过在控制台中使用模拟器吗?@tvicky4j247模拟器可以测试单个请求,我需要在发布之前手动测试应用程序的所有功能。我了解模拟器用于单元测试安全规则,如果有这种方法,我想用“起草的”安全规则手动测试应用程序