如何仅不基于UserID设置Firebase规则?

问题描述

我似乎找不到针对此特定方案的任何有关Firebase读/写规则的文档。目前,我已将“用户数据库设置为仅允许登录用户写入数据,并且只能写入其数据库中的“子级”。这非常简单。

但是,在用户“子代”中,有一个游戏ID,与“游戏”数据库下的子代名称相对应。以下是一些有关如何在Firebase中构造数据的示例:

(User Database Ex)
{
  "fakeuser1" : {
    "GameID" : "G071520001","Name" : "Jack Sparrow","email" : "[email protected]"
  },

在游戏数据库中,游戏数据的结构如下:

(Game Database Ex)
{
  "ActiveGames" : {
    "G071520001": {
          "Host" : "Jack Sparrow","hostPos" : "25,45","guestPos": "38,47"
    },"G071520200": {
          "Host" : "Jim Fake",47"
    }
  }

使用JS读取正确的数据并将其写入正确的“活动游戏”,以比较游戏ID(如果用户个人资料中存在游戏ID)没问题,我只是在尝试使用 firebase规则进行设置,以使玩家只有在配置文件中具有匹配的GameID时,才可以将数据写入活动游戏。

谢谢!

edit 这两个数据库都是“实时”类型的数据库

解决方法

一个数据库实例的安全规则无法从另一个数据库实例读取数据。允许这样做几乎抵消了从拥有多个实例开始就获得的任何性能优势。

您需要确保数据库实例中有确保访问安全所需的所有数据。这可能意味着您需要将(一些)用户配置文件数据复制到该用户所属的数据库实例中。