0

Firebaseデータベースのデータエントリにセキュリティを追加するために、Firebaseルールをテストしています。私はそれを確実にしたいと思います:FirebaseはランダムなsetValue()子データに対して拒否されたアクセス権を返します

  1. のみFirebase認証「ユーザー」/「アカウント」

  2. に自分のアカウント情報を読み書きすることができる唯一のFirebase認証「ユーザー」読むことができます/独自の文字を書きますデータを「メッセージ」に変換する。私は、次のルール書かれている。この目的のため

:上記のルールが正しいと見

{ 
    "rules": { 
    "account": { 
     "$uid": { 
     ".read": "auth.uid === $uid", 
     ".write": "auth.uid === $uid"   
     }  
    }, 
    "messages": { 
     "$message_id": { 
     ".read": "auth !== null", 
     ".write": "auth.uid === newData.child('_uid').val() && 
      root.child('account').hasChild(auth.uid) === true" 
     }, 
    } 
    } 
} 

が、しかし、私は取得にを "失敗しました::DatabaseError許可が拒否された"(3私がログインしているユーザアカウントのためにプッシュしている "メッセージ"子ノードの名前です。ここで

はfirebase方法に私のプッシュのコードスニペットです:

Permission denied for txtStr, txtCharName and txtEner

を私は:

public void saveToFirebase(){ 
    String echo = ""; 
    String _uid = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
    DatabaseReference mCurrentRecord = mFirebaseGame.push(); 
    Log.d(LOG, "User is " + _uid + "\nNew record ID: " + mCurrentRecord.getKey()); 

    gameCharacter.map.put("_uid", _uid); 

    try{ 
    for(String keys : gameCharacter.map.keySet()){ 
     echo += keys + ":" + gameCharacter.map.get(keys) + "\n"; 
     mCurrentRecord.child(keys).setValue(gameCharacter.map.get(keys)); 
    } 
    } 
    catch(Exception e){ 
    error = e.toString(); 
    } 
} 

そして、ここでは、私が取得しています許可拒否エラーですなぜ私はパーミッションが子ノード "txtStr、txtCharName、txtEner"に対してのみ拒否されたかを知ることができますが、残りは正常に実行されていますデータベースにプッシュされます。

Firebase Rulesの構造などで何か不足していると指摘できたら幸いです。ありがとうございました。

+1

あなたの現在のコードが失敗している理由がわかりません。しかし、地図をループするのではなく、単に 'mCurrentRecord.setValue(gameCharacter.map)'を呼び出すのはなぜですか? –

+0

あなたは正しい@Frank van Puffelenです。すべてのgameCharacter.mapをsetValue()に入れると、エラーは修正されました。 – raiser00

+0

raiser00をよく聞いてください! –

答えて

1

@FrankバンPuffelenはmCurrentRecord.setValue(gameCharacter.map)を呼び出すことにより、一度にすべての子ノードの値を挿入することで、指摘、とのsetValue(にデータを入れて反復しないように、この質問に対する正しい答えは)あり別々に。

これは、newData内の一括挿入された子ノードのグループをチェックする「メッセージ」ルールが原因です。

"messages": { 
    "$message_id": { 
     ".read": "auth !== null", 
     ".write": "auth.uid === newData.child('_uid').val() && 
     root.child('account').hasChild(auth.uid) === true" 
    }, 
} 
関連する問題