如何仅允许将新条目添加到实时数据库?

时间:2018-07-18 17:23:06

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

我有一组联系人(订户):

{
    "contacts": {
        "-LHi-8bIG4xaZADdc9mf": {
            "name": "John Doe",
            "email": "example@example.com"
        },
        "-LHi-PL2HORYJTXB2MjE": {
            "name": "Jane Doe",
            "email": "example@example.com"
        }
    }
}

我现在需要一个安全规则,以允许匿名用户添加新条目,但不能读取或更新现有条目。

我目前使用此规则,但它似乎还允许更新现有条目以及覆盖整个“联系人”集合:

{
    "rules": {
        "contacts": {
            ".read": false,
            ".write": "newData.exists()"
        }
    }
}

我也尝试过!data.exists(),但这似乎完全限制了写访问权限。

1 个答案:

答案 0 :(得分:2)

您当前的规则适用于整个联系人节点。因此,如果存在任何数据,您将无法添加其他任何内容。

您需要做的是在规则中使用wildcard添加一个额外的层:

{
    "rules": {
        "contacts": {
            // This is the wildcard that represents the user uid 
            "$user_id": {
              ".read": false,
              ".write": "!data.exists()"
            }
        }
    }
}

也请查看有关existing data vs new data的文档。