2016-07-12 43 views
3

firebaseがこの特定の書き込みを行わない理由を理解できません。私はシミュレータで同じことをやっているように感じ、そこで動作します。以下はこのセクションの私のセキュリティルールです。私のAndroidアプリのコードでFirebase書き込み許可が拒否されました

"joinRequests" : { 
    "$clanid": { 
    "$requesterid" : { 
     ".read" : "$requesterid === auth.uid || root.child('clans/' + $clanid + '/members/' + auth.uid + '/admin').val() === true", 
     ".validate": "newData.hasChildren(['request'])", 
     "request" : { 
     ".write" : "true", 
     ".validate": "newData.hasChildren(['name', 'message'])", 
     "name" : { 
     ".validate": "newData.isString()" 
     }, 
     "message" : { 
      ".validate": "newData.isString()" 
     }, 
     "$other": { 
     ".validate": false 
     } 
     }, 
     "approved" : { 
     ".write" : "root.child('clans/' + $clanid + '/members/' + auth.uid + '/admin').val() === true || ($requesterid === auth.uid && !newData.exists())", 
     ".validate": "newData.isBoolean()" 
     }, 
     "$other": { 
     ".validate": false 
     } 
    } 
    } 
}, 

私は、次の2行を実行します。私は奇妙見つける何

dataSnapshot.child("request").getRef().removeValue(); 
dataSnapshot.child("approved").getRef().removeValue(); 

を、それが「承認」の値ではなく、「要求」の値を削除するために私にできることです。 dataSnapshotは$ requesteridです。私はシミュレータでこの行を実行し、書き込みを許可する場合:

/joinRequests/QV28VJYG/c1cef959-2dd3-4cab-8649-2b81892cffa6/request 

私はアンドロイドのスタジオで取得エラーはこれです:

W/RepoOperation: setValue at /joinRequests/QV28VJYG/qRlJt4UIAcRVIe9VXoYVBa68tO43/request failed: DatabaseError: Permission denied 

それは私がやっていることを馬鹿に何かあることが、私必要がありますそれが何であるか想像することはできません。どんな助けも素晴らしいだろう、ありがとう。

+0

リクエスト内でこの検証ルールなしで試すことができます: ".validate": "newData.hasChildren(['name'、 'message']),? –

+0

これは、問題がこの行 ".validate"であったことが判明しました: "newData.hasChildren(['request'])私の要件のために私は$ requesteridに書き込みを許可することができませんでした。子供たちを削除し、それを許可していない親のこのルールでした。奇妙なことに、シミュレータはそれをキャッチしませんでした。 – Matt

+0

Wooooops。うまくいけば、シミュレータのUIがソートされた行メッセージを期待していて、APIが行メッセージの並べ替えられていない配列を返すときにいくつかの行を強調表示できないように見えます。私はそれを修正します。レポートをありがとう! – tstirrat

答えて

0

newDataは、操作が行われた後のデータの表示方法を表すスナップショットです。

newData.hasChildren(['request'])は、操作が実行された後requestノードが存在することを確認するfirebaseに指示します。したがって、このノードの削除は禁止されています。

関連する問題