firebase - 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);
谢谢大家!
解决方案
JavaScript 的 Geofire 将位置与键相关联。除了这两位信息之外,它在该位置中不保留任何其他属性。
这意味着基于当前用户做某事的唯一方法是使用该用户的 UID 作为键。您可以通过以下方式确保这一点:
"image_locations": {
"$uid": {
".write": "auth.uid === $uid"
}
}
由于您想允许多张照片,因此这是不可能的。GeoFire for Java 最近添加了向地理位置添加更多数据(例如您需要 UID)的功能,但这在 JavaScript 库中还没有实现。
推荐阅读
- javascript - 在 webview Android 中仅显示网站的一部分
- sql - psql 复制到 csv
- c# - ReadAsStringAsync 使用 cts.Token
- sql - 如何将 DB2/Oracle 中的 FileNet ID ID 转换为友好的 GUID?
- unity3d - 如何制作像泡泡射击一样的点状物理射击模拟器
- c# - 具有不变类型参数的泛型中具有协变类型参数的嵌套泛型无法编译的原因是什么?
- javascript - 当 skiplocationchange 为真时返回 Angular 6
- android - 需要从其他有状态小部件更新布尔标志
- go - 当我使用测试 Go Project 代码的 java 语言运行测试时,如何获得代码覆盖率报告?
- javascript - 每个日期都包含一个数组的映射,实现问题