如何使用 Firebase 安全规则只允许写入 1 个值

How to allow only 1 value to be allowed writing with Firebase security rules

我对 Firebase 安全规则感到非常困惑 - 关于文档中自上而下的工作。

所以我有这个规则:

  "rules": {
    "taskUsers": {
      ".read": "auth != null",
      "$uid": {
       ".read": "auth != null",
       ".write": "auth != null && auth.uid == $uid",
      },
    },
  }

因此所有用户数据只能由创建它们的用户更新 b/c of auth.uid == $uid。但是在 firebasepath/taskUsers/$uid 下,我有一个名为 notification 的值,我希望其他用户可以写入。就像在聊天通知系统中一样 - 当其他用户联系该用户时,"other users" 可以更改/写入值通知(如 +1)。但是用上面的规则,"other users"当他们post联系时,它会return权限被拒绝。所以如果我按照

这样的规则
"rules": {
    "taskUsers": {
      ".read": "auth != null",
      "$uid": {
       ".read": "auth != null",
       ".write": "auth != null && auth.uid == $uid",
       "notification": {
        ".write": "auth != null",
        },
      },
    },
}

规则被忽略了...那么我怎样才能创建一个规则,只允许登录的每个人写入 taskUsers/$uid 下的通知值?

我还没有测试过,但这至少应该为您指明正确的方向。他们的规则有点棘手......我仍然认为应该在 Firebase 前面有一个 WebService 来进行任何数据操作。否则如何实现重要的业务逻辑?

"rules": {
    "taskUsers": {
      ".read": "auth != null",
      "$uid": {
       // authenticated users can write as long as they have a notification property
       ".write": "auth != null && (auth.uid == $uid || newData.hasChild('notification'))",
       "notification": {
       // Bonus rule: only increment the number by 1 or -1
           ".validate": "newData.isNumber() && ((!data.exists() && newData.val() === 1 || newData.val() === -1) || newData.val() === data.val()+1 || newData.val() === data.val()-1)",
        }
      },
    },
}