我们正在开发一个基于云修复的Android应用程序。
现在,我们已经发布了应用程序的生产,我们继续增加更多的功能,变化迫使我们添加/更改Firestore安全规则。
问题是,在向所有用户发布规则之前,如何用新的安全规则测试该应用程序?
我在docs中看到Firestore有一些仿真器,但我不明白他是否可以帮助,或者它只用于单元测试,还有一个模拟器可以在草案模式下测试单个请求,但最终我们需要测试应用程序的功能。
换句话说,在将应用程序应用于所有用户之前,是否有办法更改安全规则并对其进行测试?
另外,对于那些在生产中使用Firebase的人,我也有一些疑问:
也许我漏掉了一些重要的东西。
提前谢谢。
发布于 2019-09-17 12:33:49
为了测试安全规则,您可能需要查看Firebase模拟器(Beta):
防火墙仿真器 Firebase模拟器使完全验证应用程序的行为和验证Firebase安全规则配置变得更加容易。使用Firebase模拟器在本地环境中运行和自动化单元测试。
样本测试:
firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
assertFails(pr: Promise) => Promise此方法返回一个承诺,如果输入成功,该承诺将被拒绝;如果输入被拒绝,则返回成功承诺。如果数据库读取或写入失败,则使用此方法断言。
发布于 2019-09-26 10:09:44
我使用了Bolt,一个超集,它将转到JSON安全规则。这看起来比通过Firebase UI使用标准规则和模拟器要好得多,特别是当应用程序增长时规则变得越来越大和复杂时,因为Bolt允许您创建函数来重用用于读/写/验证逻辑的通用代码。
螺栓文档:
https://github.com/FirebaseExtended/bolt/blob/master/docs/guide.md测试指令
https://github.com/FirebaseExtended/bolt/issues/80在回答我们的问题时,我们将对这里进行详细的解释,以便为您的开发和生产环境支持独立的Firebase项目。
发布于 2019-11-08 09:03:55
不幸的是,我没有找到正式的解决方案,我使用前缀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);
}
}
}https://stackoverflow.com/questions/57972089
复制相似问题