【问题标题】:vote system firebase security rules投票系统 Firebase 安全规则
【发布时间】:2019-02-26 17:45:00
【问题描述】:

我正在尝试为此节点编写规则,因此只有当前登录的用户可以编辑/更新它,只有值“-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" 节点的值?

【问题讨论】:

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


    【解决方案1】:

    这是一种更易读的方式来完成同样的事情(至少对我来说):

    ".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 以及您想要允许(和禁止)的写入操作的代码,可能会更容易提供帮助。

    【讨论】:

    • 但是我已经在这个节点内的另一组规则中设置了没有人可以写给这个用户$uid".validate":"newData.val() == auth.uid",我测试了它,我不能写那个用户@987654325 @ 除非我以该用户身份登录。我想允许的操作是,不是当前登录用户的用户可以将此用户投票为某些值,但用户本人只能为自己投票另一组值。
    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2015-01-08
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    相关资源
    最近更新 更多