当user1 - > user2(user1向user2发送请求)。我正在尝试使用firebase规则执行某些检查,这些规则是:
为此,我写了以下规则:
{
"rules":
{
"requests":
{
"$requestId":
{
".read": "auth != null",
".write": "auth!=null &&
data.child('username2').val() == true &&
root.child('usernames-list').child( data.child('username2') ).exists() &&
!root.child('user-requests').child( auth.uId ).child('accepted-pending').child($requestId2).child( data.child('username2') ).exists()"
}
}
}
}
但它在两个方面返回以下错误:
数据结构:
requests
---$requestId
---key: value
user-requests
---$userId
---pending
---$requestId
---key: value
---accepted
---$requestId
---key: value
---rejected
---$requestId
---key: value
---unfriend
---$requestId
---key: value
---accepted-pending
---$requestId
---key: value
传入的json:
user1 --> authId of user1
username1 --> username of 1st user
username2 --> username of 2nd user
...
注意1:我尝试使用newData.
代替data.
但仍然遇到相同的错误。此外,newData('username2').isString()
也会返回相同的错误
注意2:我可以通过创建一个单独的列表来避免$requestId2
(错误),该列表仅包含user1与之友好的用户名,并将其与之比较;但我仍然需要能够将data.('username2')
用作root.child()
编辑1:以下规则成功发布,但我不确定它是否仍然符合我提到的(需要检查):
".write": "auth!=null &&
newData.child('username2').val() == true &&
root.child('usernames-list').hasChild( newData.child('username2').val() ) &&
!root.child('user-requests').child( auth.uId ).child('accepted-pending-usernames').hasChild( data.child('username2').val() )"
价:Firebase security - newData() as a parameter of hasChildren() expression
答案 0 :(得分:1)
编辑2:这应该是解决方案:
.val()
.exists()
仍在最后/accepted-pending-usernames/
)来克服通配符错误 data
已替换为newData
".write": "auth!=null &&
newData.child('username2').val() == true &&
root.child('usernames-list').child( newData.child('username2').val() ).exists() &&
!root.child('user-requests').child( auth.uId ).child('accepted-pending').child('accepted-pending-usernames').child( data.child('username2').val() ).exists()"
注意:问题可能仍未解决,因为不清楚firebase是否允许在规则中使用多个通配符