У меня следующая структура базы данных
{
"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
без поля email
?