Firebase 规则模拟器:如何模拟推送
Firebase rules simulator: how to simulate push
这是我的数据库:
{
"lists": {
"list1_id_1": {
"field1": "some value",
"field2": "some value"
}
}
}
我想允许任何用户创建新列表,但不能修改现有列表,所以我尝试了以下规则:
{
"rules": {
"lists": {
".read": "true",
".write": "!data.exists()"
}
}
}
当我尝试将以下数据写入 /lists/
时,这不起作用:
{ "field1": "qq", "field2": "ww" }
显然,“.write”规则写入失败,因为 /lists/ 已经存在。
所以我尝试了以下规则:
{
"rules": {
"lists": {
".read": "true",
"$list_id": {
".write": "!data.exists()"
}
}
}
}
这也不起作用,Firebase 模拟器没有 select 写入操作失败的规则,所以我猜这是因为 "lists" 中缺少“.write”。
你能帮帮我吗?
我认为我的问题在于规则,以及我尝试将新项目推送到模拟器中的 /lists/ 的方式。
P.S。我知道 list_id 将在我尝试推送新数据时由 Firebase 生成,但我不确定如何将这些知识用于模拟器。
谢谢!
斯拉维克
你的第二组规则应该可以完成这项工作,但你需要在模拟器中指定一个 child ID:
{
"rules": {
"lists": {
".read": "true",
"$list_id": {
".write": "!data.exists()"
}
}
}
}
$list_id
变量指向/lists
节点下的任意child,所以在模拟器中,需要将location设置为/lists/list1_id_1
进行测试写入已经存在的 child,这应该会失败,例如:
push
操作在给定位置创建一个具有唯一 ID 的 child。要模拟这一点,您只需将位置设置为您知道尚不存在的任何随机 child 密钥,例如:/lists/some-random-string
或 /lists/-Kfg3YL0TS1X1SfQ9GGg
.
这是我的数据库:
{
"lists": {
"list1_id_1": {
"field1": "some value",
"field2": "some value"
}
}
}
我想允许任何用户创建新列表,但不能修改现有列表,所以我尝试了以下规则:
{
"rules": {
"lists": {
".read": "true",
".write": "!data.exists()"
}
}
}
当我尝试将以下数据写入 /lists/
时,这不起作用:
{ "field1": "qq", "field2": "ww" }
显然,“.write”规则写入失败,因为 /lists/ 已经存在。
所以我尝试了以下规则:
{
"rules": {
"lists": {
".read": "true",
"$list_id": {
".write": "!data.exists()"
}
}
}
}
这也不起作用,Firebase 模拟器没有 select 写入操作失败的规则,所以我猜这是因为 "lists" 中缺少“.write”。
你能帮帮我吗? 我认为我的问题在于规则,以及我尝试将新项目推送到模拟器中的 /lists/ 的方式。
P.S。我知道 list_id 将在我尝试推送新数据时由 Firebase 生成,但我不确定如何将这些知识用于模拟器。
谢谢! 斯拉维克
你的第二组规则应该可以完成这项工作,但你需要在模拟器中指定一个 child ID:
{
"rules": {
"lists": {
".read": "true",
"$list_id": {
".write": "!data.exists()"
}
}
}
}
$list_id
变量指向/lists
节点下的任意child,所以在模拟器中,需要将location设置为/lists/list1_id_1
进行测试写入已经存在的 child,这应该会失败,例如:
push
操作在给定位置创建一个具有唯一 ID 的 child。要模拟这一点,您只需将位置设置为您知道尚不存在的任何随机 child 密钥,例如:/lists/some-random-string
或 /lists/-Kfg3YL0TS1X1SfQ9GGg
.