写入操作失败-firebase数据库规则

写入操作失败-firebase数据库规则,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我的目标如下: const offer = { offerInfo: { price: '', status: 'open', message: '', ownerUID: '', ownerName: '', ownerPhoto: '', ownerAvgRating: '', ownerReviewNumber: '', }, offerMetaData: { userHasSeenOffer: false

我的目标如下:

const offer = {
  offerInfo: {
    price: '',
    status: 'open',
    message: '',
    ownerUID: '',
    ownerName: '',
    ownerPhoto: '',
    ownerAvgRating: '',
    ownerReviewNumber: '',
  },
  offerMetaData: {
    userHasSeenOffer: false,
    userHasBeenNotified: false,
  }
}
我正在尝试将其发布到以下节点:

更新['jobs/${activeJob.key}/offers/${currentUser.uid}]=offer
然后
firebase.database().ref().update(更新)

如您所见,我使用用户uid作为报价本身的id

现在,当我尝试使用以下规则发布它时,我得到了一个权限拒绝错误,我不知道为什么

规则:

"jobs": {
  "$job_uid": {
    ".read": "auth !== null",
    "job": {
      ".write": "!data.exists() && root.child('allUsers/serviceUsers/' + auth.uid + '/paymentDetails').exists() || data.exists() && root.child('jobs/' + $job_uid + '/job/owner').val() === auth.uid",
    },
    "offers": {
      "$offer_uid": {
        "offerInfo": {
          ".write": "$offer_uid === auth.uid",
        },
        "offerMetaData": {
          ".write": "root.child('jobs/' + $job_uid + '/job/owner').val() === auth.uid || $offer_uid === auth.uid",
        },
      },
    },
...

有什么想法吗?

您正试图直接写入
$offer\u uid
,但该节点上没有任何写入规则,因此它将使用默认值false

要使当前编写成功,您可以更改如下规则:

"$offer_uid": {
    ".write": "$offer_uid === auth.uid",
    "offerMetaData": {
      ".write": "root.child('jobs/' + $job_uid + '/job/owner').val() === auth.uid",
    },
  },
我直接在
$offer\u uid
中将write rule向上移动了一个节点,而不是将它分别放在两个child中


另一种选择是保留规则并拆分写入,以便写入子节点。

您正试图直接写入
$offer\u uid
,但该节点上没有任何写入规则,因此将使用默认值false

要使当前编写成功,您可以更改如下规则:

"$offer_uid": {
    ".write": "$offer_uid === auth.uid",
    "offerMetaData": {
      ".write": "root.child('jobs/' + $job_uid + '/job/owner').val() === auth.uid",
    },
  },
我直接在
$offer\u uid
中将write rule向上移动了一个节点,而不是将它分别放在两个child中


另一种选择是保留规则并拆分写入,以便写入子节点。

还有一个问题!我以为规则会层叠,意味着第一条写规则会覆盖第二条写规则?@WalterMonecke你到底在说什么规则?还有一个问题!我以为规则会层叠,这意味着第一条写规则会覆盖第二条写规则?@WalterMonecke你到底在说什么规则?