通过userID参数保护路径

时间:2018-12-09 15:37:31

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

数据的结构如下:

leads
|__(ID)
   |__name
   |__email
   |__userID

当前Firebase规则:

{
  "rules": {
    "leads": {
        ".indexOn": ["userID"],
        ".read": "auth !== null",
        ".write": "auth !== null"
    }
}

这仅在用户未登录的情况下保护数据。我想增加一层保护,以确保登录的用户无法读取auth.uid !== userID处的任何潜在客户,但我有无法在上面进行构造。

我以为这可以用,但是父级".read": "auth !== null"似乎可以覆盖它。

{
  "rules": {
     "leads": {
        ".indexOn": ["userID"],
        ".read": "auth !== null",
        ".write": "auth !== null",
        "$id": {
          ".read": "data.child('userID').val() === auth.uid"
        }
     }
   }
}

2 个答案:

答案 0 :(得分:0)

该规则实际上有效。我用于运行模拟的路径具有另一个父节点的ID,因此实际数据不存在并且模拟失败。

答案 1 :(得分:0)

向用户授予对任何节点的访问权限时,即隐式地授予该用户对该节点及其下所有内容的访问权限。您无法切断对某人已被授予较高阅读权限的孩子的访问权限。当您为所有经过身份验证的用户授予“销售线索”访问权限时,根据该规则执行的“ $ id”规则实际上对经过身份验证的用户完全无效。