【发布时间】:2017-12-10 05:29:10
【问题描述】:
我正在尝试保护我的 firebase 数据库以允许创建新记录,但不允许删除现有记录。最终,我计划在我的应用程序中使用 Firebase 身份验证,并允许用户更新现有记录(如果他们是作者),但我试图首先让这个简单的案例工作。
但是!无论我在数据库规则模拟器中尝试什么,尽管seems to suggest 的文档是什么,data.exists() 的值似乎总是正确的。根据我对the documentation 的理解,变量data 表示数据库中的一条记录,就像它在操作发生之前所做的那样。也就是说,对于创建,data 将不存在,而对于更新/删除,data 将引用数据库中存在的真实记录。 情况似乎并非如此,以至于我实际上怀疑 Firebase 中存在错误,因为在我的数据库上设置以下规则时,不允许所有写入操作:
{
"rules": {
".read": true,
".write": "!data.exists()"
}
}
无论我在模拟器中输入了什么值,无论是位置还是数据。我什至编写了一个小型 EmberJS 应用程序来验证模拟器是否在说真话,并且它也被拒绝所有写操作的权限。
我真的不知道从这里去哪里,因为我几乎没有东西可以尝试。我尝试从我的数据库中删除所有记录,这让模拟器认为它可以执行写操作,但我的测试应用程序仍然得到 PERMISSION_DENIED,所以我不知道是什么导致了那里的不一致。
我对预定义的data 变量的理解是否正确?如果是这样,为什么我不能写我想要的规则?我已经看到snippets 确实试图实现我的“仅创建,不删除”规则,这似乎符合我的理解。
最后一点:我正在一个全新的 Firebase 项目中尝试这个,只使用上面的规则,我的数据库周围只有几条垃圾数据记录。
【问题讨论】:
标签: firebase firebase-realtime-database firebase-security