GeoFire - 如何设置安全规则,使地理位置只能写入auth用户?

时间:2018-06-15 19:37:39

标签: firebase firebase-security geofire

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

enter image description here

我现在陷入困境,因为我不确定如何设置我的安全规则只允许写入:"经过身份验证的用户等于照片所属的用户"。

注意:我无法执行以下操作,

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);

提前谢谢大家!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

Geofire for JavaScript将位置与密钥相关联。除了这两个信息之外,它不会在该位置保留其他属性。

这意味着基于当前用户执行某项操作的唯一方法是使用该用户的UID作为密钥。您可以通过以下方式获得保障:

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

由于您希望允许多张照片,因此无法实现。 GeoFire for Java最近添加了向地理位置添加更多数据(例如您对UID的需求)的功能,但这尚未在JavaScript库中发生。