多个inhertitance Firebase安全规则

时间:2017-05-11 21:54:34

标签: firebase firebase-security

我对自己的理智有疑问。以下是我的火力规则的一部分

{
  "rules": {
      ".read": "auth != null",
      ".write" : false,
      "users": {
           "$uid": {
               ".read": "auth != null && auth.uid == $uid", 
               ".write": "auth != null && auth.uid == $uid",
               "tokens": {
                   ".write": "(newData.val() < data.val())"
               }
           }
      },
      ...

如果我理解正确,规则说明:

  • 必须授权所有用户才能阅读任何节点
  • 所有用户都无法写入任何节点
  • 特定于用户节点:
  • 为了从您自己的数据中读取数据,您需要进行身份验证,而您只能阅读自己的节点
  • 为了写入您自己的用户数据,您必须进行身份验证,并且只能写入您自己的节点
  • 用户/令牌节点只能递减,任何用户都不得增加

有人可以通过阅读Firebase安全规则文档来确认我的假设/理解。

也有人在使用模拟器时有任何好文章或有用的提示!?

1 个答案:

答案 0 :(得分:0)

安全规则的一个重要概念是读/写规则&#34;级联&#34;在树下。这在the documentation中进行了简要讨论。这意味着,当您从上到下阅读规则时,授予访问权限的第一个规则优先于该位置的子项下面指定的任何规则。

解决您的每件事:

  • 所有用户必须经过身份验证才能阅读任何节点(
  • 所有用户都无法写入任何节点(非身份验证的用户无法写入任何节点
  • 特定于用户节点:
  • 为了从您自己的数据中读取数据,您需要进行身份验证,并且只能阅读自己的节点(
  • 为了写入您自己的用户数据,您必须经过身份验证,并且只能写入您自己的节点(
  • 用户/令牌节点只能递减,任何用户都不得增加(见下文

在您当前的规则中,检查较小的令牌无效,因为授予对身份验证用户的写入权限的先前规则会覆盖它。您还需要解决没有现有令牌值的情况。我建议修复它是使用.validate规则。 documentation建议:

  

使用.write规则授予访问权限,以确保数据   正在编写符合特定架构。

{
  "rules": {
    ".read": "auth != null",
    ".write": false,
    "users": {
      "$uid": {
        ".read": "auth.uid == $uid",
        ".write": "auth.uid == $uid",
        "tokens": {
          ".validate": "!data.exists() || (newData.val() < data.val())"
        }
      }
    }
  }
}

至于模拟器,我不知道任何用户指南,但已设法通过实验学习如何使用它。它是理解规则的非常有效的工具。

以下是使用模拟器的几种情况:

当您打开模拟器时,Authenticated处于关闭状态,模拟未经身份验证的用户。要模拟阅读,请单击阅读按钮,输入位置:例如/users/xyz/tokens,然后点击“运行”。您将在禁止该操作的规则行上看到红色X.要模拟经过身份验证的读取,请单击Authenticated按钮,为方便起见,输入一个简单的用户UID,例如&#34; Frank&#34;。现在输入位置/users/Frank/tokens,单击“运行”并观察读取是否成功。

您可以进行类似的测试,包括写入,输入位置,验证设置和值。