【问题标题】:How do I setup Firebase rules NOT based on UserID alone?如何设置不单独基于 UserID 的 Firebase 规则?
【发布时间】:2020-12-01 13:47:01
【问题描述】:

我似乎无法找到任何有关 Firebase 读/写规则的特定场景的文档。目前,我将我的“用户”数据库设置为只允许登录用户写入数据,并且只允许他们在数据库中的“孩子”写入数据。这很简单。

但是,在用户 'child' 中,有一个游戏 ID 对应于 'games' 数据库下的孩子名称。以下是我的数据在 firebase 中的结构示例:

(User Database Ex)
{
  "fakeuser1" : {
    "GameID" : "G071520001",
    "Name" : "Jack Sparrow",
    "email" : "fakeuser1@fakeemail.com"
  },

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

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

使用 JS 将正确的数据读取/写入正确的“活动游戏”以比较游戏 ID(如果它存在于用户配置文件中)没有问题,我只是在努力使用 firebase 规则设置它,以便玩家只有在他们的个人资料中有匹配的 GameID 时才能将数据写入活动游戏。

提前致谢!

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

【问题讨论】:

  • 请编辑问题以指明您正在使用的数据库。 Firebase 提供了两个数据库 - 实时数据库和 Firestore。您还应该展示您编写规则的尝试,即使它们不起作用。
  • 感谢您的更新。不幸的是,我仍然不完全清楚。你是说UsersActiveGames 的JSON sn-ps 都存储在一个Firebase Realtime Database 中吗?如果是,请编辑您的问题以显示您正在使用的实际 JSON(作为文本,没有屏幕截图)。您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。
  • @DougStevenson 编辑了这个问题,抱歉。使用实时数据库。我使用的 userID 规则是他们在文档中显示的标准,但我真的不知道从哪里开始。
  • @FrankvanPuffelen 它们是两个独立的数据库。我将直接从 .json 文件中粘贴数据。
  • @FrankvanPuffelen 我应该说同一个 Firebase 项目中有两个独立的实时数据库。

标签: firebase firebase-realtime-database firebase-security


【解决方案1】:

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

您需要确保保护访问所需的所有数据在数据库实例中都可用。这可能意味着您需要将(部分)用户配置文件数据复制到用户所属的数据库实例中。

【讨论】:

  • 谢谢弗兰克。如果我理解正确,例如在用户配置文件下的用户数据库分配一个游戏ID时,将玩家用户ID(用于登录)发送到相应游戏下的游戏数据库?然后设置规则以与该值进行比较?
  • 是的,这听起来很对。但我强烈建议在需要之前不要这样做。按实体类型创建单独的数据库实例是一种反模式。您可以轻松地将这两种类型保存在一个数据库实例中,直到用户数量需要将其分片(此时这项复杂工作的投资回报率要好得多)。
猜你喜欢
  • 2018-04-02
  • 2017-06-15
  • 2020-10-10
  • 2019-04-26
  • 2011-03-31
  • 2021-12-26
  • 2020-05-28
  • 2019-11-03
  • 2020-09-20
相关资源
最近更新 更多