Сделать базу данных Firebase в реальном времени возвращающей только разрешенные поля - PullRequest
0 голосов
/ 31 января 2019

У меня следующая структура базы данных

{
"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?

1 Ответ

0 голосов
/ 31 января 2019

После моего комментария я думаю, что решение вашей проблемы заключается в рассмотрении другой структуры данных

{
"users": {
   "$uid": {
     "email": "mail@example.com",
           }
         }
"items": {
    "$uid":{
     "externalId": "val",
     "$itemId": {
           }
}

Вы можете установить для узла read on users значение "$uid === auth.uid" и true для элементов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...