写入操作失败-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你到底在说什么规则?