Firestore规则中的WriteFields仅在模拟器中有效

时间:2018-07-21 12:18:40

标签: firebase google-cloud-firestore firebase-security-rules

我使用Firestore Rules时遇到的一个大问题是,在Firebase控制台中使用模拟器来模拟数据库访问与我从客户端看到的行为不符。现在,我偶然遇到了一个似乎无法解决的问题。

问题

模拟器中,以下语法正常工作

allow create: if request.writeFields.hasAll(["a", "b", "c"]);

当我从Android客户端请求完全相同字段时,我得到Error performing setData, PERMISSION_DENIED: Missing or insufficient permissions.

请求(简化​​)如下:

simulator

通过设置allow create;(简化),我已经验证并确定问题必须与request.writeFields相连,因为一旦我添加有关该请求的逻辑,我的请求(仅来自真实客户的请求)就会失败。
在我的所有测试中允许模拟访问数据

我的参考是List interface

问题

我想知道我是否缺少关于writeFields(可能连接到allow create)的信息,以及是否经常看到模拟访问与真实访问之间的差异。
请记住,我的语法在模拟器中可以很好地工作,但是包含完全相同的JSON数据的真实请求失败。

2 个答案:

答案 0 :(得分:1)

您现在可以使用地图差异而不是writeFields来解决此问题:

request.resource.data.diff(resource.data).affectedKeys().hasAll(["a", "b", "c"]);

答案 1 :(得分:0)

最近当尝试访问 writeFields 时,以下错误消息已添加到 Firebase控制台Firestore安全规则模拟器:< / p>

enter image description here

这意味着它不再在模拟器中运行,从而解决了此问题。