TL; DR - 我将数据写入 Firestore 后端,然后尝试立即获取该数据。这在某些尝试中起作用,但在其他尝试上失败,似乎在写入的数据与exists()
安全方法可用的数据之间存在一些延迟。
这是一个很大的问题,但经过几天的挫折之后,我设法将我的问题浓缩成一个JSBin示例。如果您可以花几分钟时间设置 Firestore 实例并为我测试一下,如果有人可以帮助您解决此问题,我会很满意。
如果你到目前为止我假设您拥有Firebase帐户并且可以轻松执行以下操作...
完成此操作后,在数据库>中规则部分添加以下规则:
service cloud.firestore {
match /databases/{database}/documents {
match /appUsers/{user} {
allow read, write: if user == request.auth.uid;
match /{children=**} {
allow read, write: if user == request.auth.uid;
}
}
match /groups/{group}{
allow create: if request.auth != null;
allow read, write:if exists(/databases/$(database)/documents/groups/$(group)/linkedUsers/$(request.auth.uid));
match /{children=**}{
allow create: if request.auth != null;
allow read, write:if exists(/databases/$(database)/documents/groups/$(group)/linkedUsers/$(request.auth.uid));
}
}
match /currencies/{currency}{
allow read: if request.auth != null;
}
}
}
完成此操作后,抓住您的配置代码段并将其粘贴到我下面的JSBin构建中 - 您将在JS文件的顶部看到配置对象。立即运行并使用电子邮件和密码登录 - 您将看到用户出现在新数据库中。
在第一个输入字段中输入名称,然后单击添加组。这会在数据库中创建一个组并将其链接到用户,反之亦然。
如果请求数据的用户的ID位于请求的组linkedUsers
子集合上,则上面添加的安全规则应允许访问组(检查数据库中的结构以查看此链接是适用于您创建的每个组。)
创建组后,我会尝试检索新的组数据,但这只占大约60%的时间。其余时间因 Missing or insufficient permissions
错误而失败。尝试创建一些组,其中一些组将立即成功查询,而其他组则失败
正在创建所有数据 - 您可以查看数据库并查看它以及我可以有时得到它的事实告诉我有一些果味正在发生,基本上我只是想了解那是什么我是如何解决它的。我确信它与安全规则中的exists()方法有关,但我真的不能指责它。
任何建议,任何建议,任何黑客,都感激不尽!
干杯全部