【问题标题】:Fetch Only User Objects Firebase?仅获取用户对象 Firebase?
【发布时间】:2016-07-01 10:35:44
【问题描述】:

在我的 Firebase 数据库中,我有一个用户可以创建的节点列表。例如:

car: {
     $uid: {
          data...
     }
}

所有用户都可以创建car。但是,应该允许用户获取他们创建的car 节点。

我尝试了几种安全规则和查询的组合,将用户 uid 存储在每个 car 中,这样我就知道是哪个用户创建了它。但是我没有运气。

我怎样才能做到这一点?安全规则和查询的组合让我有点不知所措!

【问题讨论】:

  • 你应该创建主父节点是一个用户ID,并将汽车添加为用户ID节点的子节点,这样你就可以通过用户ID获取数据
  • Firebase 建议尽可能保持数据库平坦,我同意。在相关的user 节点下存储单个car 节点似乎与此背道而驰。除非我误会了?
  • 不,不会再去规则,如果你根据登录用户存储数据,那么它违反规则是什么?
  • 啊,我一开始误会你了。我现在明白了。我没有将用户 car 节点存储在实际的 user 节点下,而是将每个用户及其 cars 再次存储在 car 节点下。例如,请参阅此处“使用索引...”标题下的示例:firebase.com/docs/web/guide/structuring-data.html

标签: ios objective-c firebase firebase-realtime-database firebase-security


【解决方案1】:

类似这样的:

{
  "rules": {
    "cars": {
      "$uid": {
        ".write": "auth.uid == $uid",
        ".read": "auth.uid == $uid"
      }
    }
  }
}

使用这些规则,登录用户可以在自己的cars 子节点下创建他们想要的任何内容。如果您只希望他们一次创建/更新/删除一辆车,您会:

{
  "rules": {
    "cars": {
      "$uid": {
        ".read": "auth.uid == $uid",
        "$carid": {
          ".write": "auth.uid == $uid"
        }
      }
    }
  }
}

在这些规则中,用户仍然可以阅读他们的整个汽车列表。但他们一次只能创建/更新/删除一辆汽车。

【讨论】:

    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多