我正在尝试为Firebase实时数据库设置以下规则:
我希望用户只能读取其中某些字段与在Firebase中写入的ID相同的书面条目。
为了更清楚地说明,这是当前在Firebase中的注册表ID:
8E4792606362B0F7
像具有该ID的注册表这样的注册表,在其中另一个字段中都有:
发件人标识符:XXXXXXXXX
其他具有另一个ID的注册表可能具有与该ID完全对应的发件人标识符(在本例中为8E4792606362B0F7)。
我希望具有该发送者标识符的用户只能从具有该ID的注册表中读取数据。
尽我所能理解this page,但我不知道该怎么做。
我大概或多或少清楚的是,规则的第一部分应为“ auth.id ==。但我什至不确定。”
为了阐明更多信息,在ID和sender_identifier都位于关系数据库表中的两个字段的情况下,我将放置检索这种情况的巧合所需的SQL查询。
SELECT ID FROM TABLE WHERE sender_identifier="8E4792606362B0F7"
这将返回允许从注册表中读取的所有ID为“ 8E4792606362B0F7”的ID,并且对于每个regitry条目都需要这样做。
怎么可能做这样的事情?
编辑:我正在上传图片以更清楚地说明问题出在哪里:
可以看出,绿色椭圆中的id与sender_identifier与另一个绿色椭圆匹配,因此,在这种情况下,绿色椭圆中的ID应该能够读取与黑色圆圈中的ID对应的数据,相反的情况也一样,黑色椭圆中的ID应该能够读取与绿色椭圆中的ID相对应的数据,因为后者具有匹配的sender_identifier(也在黑色椭圆中)。
如果在一个“不同的层次结构”中拥有我所谓的ID和sender_identifier是一个问题,我可以创建一个新字段,其信息与我所谓的ID相同,因为我是生成它的人。 / p>
答案 0 :(得分:1)
要将用户UID与SENDER_IDENTIFIER匹配并限制对其的读取访问权限,您应该执行以下操作:
"$YOUR_DOCUMENT": {
".read": "data.child('SENDER_IDENTIFIER').val() == auth.uid ||
$YOUR_DOCUMENT === auth.uid"
}
传入请求的用户必须在条目中或条目名称中具有与SENDER_IDENTIFIER匹配的Firebase UID,才能读取相应的文档。