尝试设置Firebase实时数据库规则

时间:2019-04-03 19:21:34

标签: firebase firebase-realtime-database

我正在尝试为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>

1 个答案:

答案 0 :(得分:1)

要将用户UID与SENDER_IDENTIFIER匹配并限制对其的读取访问权限,您应该执行以下操作:

"$YOUR_DOCUMENT": {
    ".read": "data.child('SENDER_IDENTIFIER').val() == auth.uid || 
    $YOUR_DOCUMENT === auth.uid"
}

传入请求的用户必须在条目中或条目名称中具有与SENDER_IDENTIFIER匹配的Firebase UID,才能读取相应的文档。