投票系统Firebase安全规则

时间:2018-09-22 16:23:10

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

我正在尝试为该节点编写规则,以便只有当前登录的用户才能使用仅值“ -5”,“ 3”或“ 1”来编辑/更新该节点,其余用户只能使用“ -3”或“ 3”对其进行编辑/更新

我拥有的数据结构是:

/ users / $ uid / votes

我到目前为止的规则是:

{
 "rules": {
   "users": {
    "$uid": {
      ".read": true,
      ".write": "auth.uid === $uid",
      "votes": {
        ".validate": "auth.uid === $uid && newData.isNumber() && (newData.val() === -5 || newData.val() === 3 || newData.val() === 1) || auth.uid !== $uid &&newData.isNumber() && (newData.val() === -3 || newData.val() === 3)"
        } 
      }
    }
  }
}

有什么方法可以改善这些规则? “ auth.uid!== $ uid”是否可以确保当前未登录的用户只能以-3或3更新此“ votes”节点的值?

1 个答案:

答案 0 :(得分:0)

这是完成相同操作(至少对我来说)的可读性更高的方法:

".validate": "(newData.isNumber() && (
  newData.val() === 3 /* Everyone can set to 3 */
  || (auth.uid === $uid && newData.val() === -5 || newData.val() === 1) ||       
  || (auth.uid !== $uid && newData.val() === -3)
)

但是规则允许每个身份验证用户写入$uid的位置,这似乎很奇怪。您确定要让任何用户写给该用户的投票吗?

如果显示要创建的JSON以及要允许(和不允许)的写入操作的代码,可能会更容易获得帮助。