使Firebase实时数据库仅返回允许的字段

时间:2019-01-31 11:19:37

标签: firebase firebase-realtime-database firebase-security-rules

我具有以下数据库结构

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字段?

1 个答案:

答案 0 :(得分:0)

在我发表评论之后,我认为解决您的问题的方法是考虑使用不同的数据结构

"$uid === auth.uid"

您可以将“读取用户”节点设置为row_number(),并将项目设置为true

相关问题