user1 - > user2(user1がuser2に要求を送信する)。両方のユーザーが友人という、私は次のルールを書いたため
はまだなっていない場合
- チェックUSERNAME2が
- チェックを存在する場合:私は、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()" } } } }
しかし、それは二つの領域で、次のエラーが返されます。
- 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私は
data.
の代わりにnewData.
を使ってみましたが、同じエラーが表示されます。また、newData('username2').isString()
も同じエラーを返します注2:user1が仲間になっているユーザー名のみを含む別のリストを作成して比較することで、
$requestId2
(エラー)を回避できます。しかし、私はまだ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'です。 –
'$ requestId2'を' $ requestId'に置き換えて、2番目のエラーメッセージを取り除きます。 –
@FrankvanPuffelenしかし、 '$ requestId'と '$ requestId2'は必ずしも同じである必要はありません。したがって、「$ wildcard1」や「$ wildcard2」のようになりました。 – Zen