Firebase安全规则:允许读取除一个字段之外的任何内容

Mar*_*ing 5 firebase

在我的Firebase安全规则中,我希望匿名用户能够读取除一个字段(secret_field)之外的任何内容:

{
  "rules": {
    ".read": true,
    ".write": "auth != null",
    "stuff" : {
      "$stuffID" : {
        "secret_field" : {
           ".read" : "auth != null"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,在Firebase中,如果secret_field评估为true 的方式上有任何读取规则,secret field则授予读取访问权限.

有没有办法扭转这种行为?(如果有任何读取规则secret_field评估为false,则禁止读取访问)

Mic*_*uer 10

您无法撤消行为,但您可以通过为公共字段引入"容器"并将.read设置为true来解决此问题.例如:

{
  "rules": {
    "stuff" : {
      "$stuffID" : {
        "public" : {
          ".read": true
        },
        "secret_field" : {
          ".read" : "auth != null"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后....../public /下的所有内容都可以被所有人访问,但是.../secret_field只能由经过身份验证的用户访问.

  • 对.你将无法在"东西"下迭代这些项目.如果您需要,您需要稍微重新构建数据.您可以在"stuff"列表中输入".read":true,然后将"secret_field"数据移动到自己的树中.例如,有/ stuff/$ stuffID用于公共数据,并将秘密数据放在/ secret_stuff/$ stuffID /(并在那里有一个合适的.read规则). (3认同)