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()
方法可用的数据之间存在延迟。
所有这些问题以及下面的答案(我真的非常希望!)
全部谢谢