Firebase规则:仅当用户包含在子节点中时,才允许用户读取数据

时间:2018-06-18 16:54:00

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

我正在尝试重写我的数据库规则,只允许特定“集合”的成员访问该集合,只有该成员包含在teams列表中。参考下面附带的图片,这是我的规则目前的样子:

    {
        "rules": {
            "collection": {
                "$collection_id": {
                    "$teams" : {
                        ".read": "data.child('id').val() === auth.uid"
                    }
                }
            }
        }
    }

enter image description here

然而,这似乎不起作用,我相信它不完整。如何更新我的规则以匹配此设计结构?如果需要对我的结构进行任何更改以支持这一点,请进行调整,然后尝试更新当前的生产数据。

1 个答案:

答案 0 :(得分:1)

您可以像这样进入teams节点:

{
    "rules": {
        "collection": {
            "$collection_id": {
                ".read": "data.child('teams').child(auth.uid).child('id').val() === auth.uid"
            }
        }
    }
}

现在,teams节点中存在不必要的冗余。子节点的id在其自己的子ID中重复。如果只是在数据库中设置teams/{teamId} = true,则可以简化数据库和规则,而规则可能看起来像这样,只允许团队中列出的用户阅读整个集合:

{
    "rules": {
        "collection": {
            "$collection_id": {
                ".read": "data.child(auth.uid).val() === true"
            }
        }
    }
}