-1
当user1 - > user2(user1向user2发送请求)。我想执行使用火力规则某些检查,它们是:
- 检查是否存在USERNAME2
- 检查如果两个用户尚未朋友
的,我已经写了下面的规则:
{
"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()"
}
}
}
}
但它在两个方面会返回以下错误:
- data.child('username2')---->第9行:child()需要一个字符串参数。
- data.child($ requestId2)---->第9行:未知变量$ requestId2
数据结构:
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.
,但仍然出现相同的错误。注意2:我可以通过创建一个单独的列表来避免$requestId2
(错误),该列表只包含用户user1是朋友的用户名,并将其与它进行比较;而且,newData('username2').isString()
也会返回相同的错误
但我仍然需要能够使用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
's/auth.uId/auth.uid/g'(换句话说:用'auth.uid'替换'auth.uId')来摆脱第一个错误信息。 JavaScript是区分大小写的和'auth.uId' <>'auth.uid'。 –
用'$ requestId'替换'$ requestId2'来摆脱第二个错误信息。 –
@FrankvanPuffelen但是'$ requestId'和'$ requestId2'并不总是相同的。因此,它更像'$ wildcard1'和'$ wildcard2' – Zen