首页 > 解决方案 > GeoFire - 如何设置安全规则,使 geofire 位置只能写入 auth 用户?

问题描述

所以我有一个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);

谢谢大家!

标签: firebasefirebase-securitygeofire

解决方案


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

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

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

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


推荐阅读