Firestore exists()方法在创建后无法立即访问数据

时间:2017-11-17 14:22:30

标签: angular firebase angularfire2 google-cloud-firestore

TL; DR - 我似乎在写入Firestore的数据与exists()可用的相同数据之间遇到延迟我的安全规则中的方法 我会爱一个人,解释问题/给我修复/建议一个替代方案。详情如下......

详细版本

我有groups的集合和users的集合。任何 用户 都可以创建 ,当他们这样做时,他们的ID会被添加到该子集合中名为linkedUsers 群组 ,而新的 群组 ID已添加到<<1>}的子集合中strong> 用户 ,名为linkedGroups

我们的想法是,在创建 后,只能由 用户 读取或更新 用户 谁的ID在该群组的linkedUsers列表中,或者在linkedGroups列表中包含 群组 ID的人。

我有这个设置 - 按预期创建组和子集合,所有看起来都很好。我有一个onSnapshot()监听器,维护users/{myUid}/linkedGroups中所有我的组的列表。这里的访问权限由简单的规则授予......

match /users/{user}{
   allow read, write: if user = request.auth.uid;
}

我还可以导航到新页面,该页面会检索特定 的所有详细信息。如果请求用户的ID在该组的linkedUsers子集合中,我有一条允许访问组的规则...

match /groups/{group}{
   allow read, write:if exists(/databases/$(database)/documents/groups/$(group)/linkedUsers/$(request.auth.uid));
}

这也似乎工作正常,但这是问题。创建新组时,我希望立即导航到该新组的详细信息页面。我有一个监听器设置,当组数据(显然)被写入时会触发,然后我转到详细页面。 大约50%的时间 ,但另外50%我得到 Missing or insufficient permissions 错误。如果我刷新屏幕甚至只是等待一两秒钟,那么我可以手动启动细节页面。

感觉就像在写入后端的数据与安全规则中exists()方法可用的数据之间存在延迟。

  • 有没有其他人遇到过此类似的情况?
  • 我是以错误的方式解决这个问题还是出错了 结论?
  • 这是Firestore中的一个错误(毕竟它仍处于测试阶段)?
  • 最重要的是,任何人都可以建议一种方法来解决这个问题 hack,bodge还是其他任何手段?

所有这些问题以及下面的答案(我真的非常希望!)

全部谢谢

0 个答案:

没有答案