2017-01-09 8 views
-1

user1 - > user2(user1がuser2に要求を送信する)。両方のユーザーが友人という、私は次のルールを書いたため

はまだなっていない場合

  1. チェックUSERNAME2が
  2. チェックを存在する場合:私は、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()" 
         } 
        } 
        } 
    } 
    

    しかし、それは二つの領域で、次のエラーが返されます。

    1. data.child( 'username2')----> 9行目:child()は文字列引数を要求します。
    2. 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

+0

's/auth.uId/auth.uid/g'(言い換えれば、' auth.uId'を 'auth.uid'に置き換えて)、最初のエラーメッセージを取り除きます。 JavaScriptは大文字と小文字を区別し、 'auth.uId' <>' auth.uid'です。 –

+2

'$ requestId2'を' $ requestId'に置き換えて、2番目のエラーメッセージを取り除きます。 –

+0

@FrankvanPuffelenしかし、 '$ requestId'と '$ requestId2'は必ずしも同じである必要はありません。したがって、「$ wildcard1」や「$ wildcard2」のようになりました。 – Zen

答えて

1

編集2:これは溶液であるべきである。

  1. .val()はT内に追加されています彼は
  2. .exists()
  3. datanewData

    ".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()" 
    

に置き換えられているワイルドカードのエラーを克服するために

  • は、私は、ユーザー名の別のリスト(/accepted-pending-usernames/)を作成しました最後に残っているブラケット注: firebaseがrで複数のワイルドカードを使用できるようにしても、疑問が残っていますules

  • 関連する問題