我具有以下数据库结构
android/
我需要允许任何经过身份验证的用户在通过{
"users": {
"$uid": {
"externalId": "val",
"email": "mail@example.com",
"items": {
"$itemId": {
}
}
}
}
}
查询该用户的节点时读取任何用户的items
,但不允许读取externalId
字段
这是此查询的代码
email
这是数据库规则
val reference = FirebaseDatabase.getInstance().getReference("users")
val query = reference.orderByChild("externalId").equalTo(extId)
query.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val list = mutableListOf<Item>()
if (dataSnapshot.exists()) {
for (user in dataSnapshot.children) {
for (itemSnapshot in user.child("items").children) {
val item = itemSnapshot.getValue(Item::class.java)
item?.let {
list.add(item)
}
}
}
}
result.value = list
}
override fun onCancelled(databaseError: DatabaseError) {
}
})
但是,这允许读满{
"users": {
".indexOn": "externalId",
".read": "auth !== null && query.orderByChild == 'externalId' && query.equalTo !== null"
"$uid": {
".write": "$uid === auth.uid"
}
}
}
节点包括$uid
。如何配置规则的方式,数据库返回email
,而不节点$uid
字段?
答案 0 :(得分:0)
在我发表评论之后,我认为解决您的问题的方法是考虑使用不同的数据结构
"$uid === auth.uid"
您可以将“读取用户”节点设置为row_number()
,并将项目设置为true