【问题标题】:GeoFire - How to set security rule such that the geofire location is only writeable to the auth user?GeoFire - 如何设置安全规则,使 geofire 位置只能写入 auth 用户?
【发布时间】:2018-06-16 04:21:01
【问题描述】:

所以我有一个 geofire 数据结构,如下图所示。我的每个 geofire 位置都代表拍摄照片的位置。所以红色圈出的唯一键是对应于照片的键,保存在我的数据库中的一个单独的分支中。

我现在被卡住了,因为我不确定如何设置我的安全规则,仅在以下情况下允许写入:“经过身份验证的用户等于照片所属的用户”。

注意:我不能执行以下操作,

image_location
 -public
  -user id
   -picture id
     - g: 
     - l:
        -0:
        -1:

这是因为我需要将所有图片位置保存在1个分支下,以便所有用户都可以直接查询到图片,这样:

ref = FirebaseDatabase.getInstance().getReference()
.child(image_location)
.child(public);
GeoFire geoFire = new GeoFire(ref);

提前谢谢大家!

【问题讨论】:

  • 自从我针对 geoFire 开发以来已经有很长一段时间了,但我记得,我用它来读取,即你从 geoFire get,你不写它. ...对吗?
  • 您好,谢谢您的回复,我其实不知道。我实际上并不打算写,就像更新 geoFire 一样。我唯一要做的就是删除它,但我认为您需要写入为真才能允许删除?还是不是这样?
  • @RonRoyston 抱歉,我可能遗漏了一些东西。但想想你可能错过了理解我。查询我的 GeoFire 没有问题。只是想弄清楚如何执行安全规则。

标签: firebase firebase-security geofire


【解决方案1】:

Geofire for JavaScript 将位置与键相关联。除了这两位信息之外,它在该位置中不保留任何其他属性。

这意味着基于当前用户做某事的唯一方法是使用该用户的 UID 作为键。您可以通过以下方式确保这一点:

"image_locations": {
  "$uid": {
    ".write": "auth.uid === $uid"
  }
}

由于您想允许多张照片,因此这是不可能的。 Java 版 GeoFire 最近添加了向地理位置添加更多数据(例如您需要 UID)的功能,但这在 JavaScript 库中还没有实现。

【讨论】:

  • “GeoFire for Java 最近添加了向地理位置添加更多数据(例如您需要 UID)的功能”等等,这将解决我的问题,不是吗?由于我使用 Java for android,我将能够向 geofire 对象添加其他数据。我现在正在浏览 Java 的 GeoFire 文档,我还没有找到关于向 geofire 对象添加额外数据的部分。
  • 哦,等等,我完全误读了您问题中的代码。确实,Java 版本现在已经具备了这种能力。我自己没有使用过,但它应该可以满足您的需求。
  • 谢谢!我仍在尝试找出该功能,但它应该可以解决我的问题。非常感谢您的帮助!此外,您在 udacity 上的 firebase 课程也很棒,也非常感谢您!
【解决方案2】:

Understand Firebase Realtime Database Rules。这是如何做到这一点的。特别是那个写规则。 ...在您的情况下,分支不会是 db("users"),它将是您命名的任何内容...

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2019-04-11
    • 2016-03-21
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 2019-02-01
    • 2019-09-15
    相关资源
    最近更新 更多