我对自己的理智有疑问。以下是我的火力规则的一部分
{
"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安全规则文档来确认我的假设/理解。
也有人在使用模拟器时有任何好文章或有用的提示!?
答案 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
,单击“运行”并观察读取是否成功。
您可以进行类似的测试,包括写入,输入位置,验证设置和值。