2017-01-17 8 views
0

Firebridgeデータベース(この例では[branch1、branch2])から、Swift言語で の枝のリストを取得しようとしています。 "branches")何も返さず、最初のprint関数も呼び出されていませんが、branch1のようなブランチの1つを観察するとうまくいきます。Firebaseのデータベース参照を参照して最上位ノードの値を取得できません

ref.child("branches").child("branch1").observe(.value, with: { snapshot in 

     let address = snapshot.childSnapshot(forPath: "address").value 
     print("\(address)") 
    } 

、それ: は今どのように私は枝のリスト([支社、BRANCH2])

let ref = FIRDatabase.database().reference() 

    ref.child("branches").observe(.value, with: { snapshot in 

     print("+++++++++++++++++ ") 

     print("++++++++++++\(snapshot.hasChildren())") 
     for child in snapshot.children{ 

      let branch = child as! FIRDataSnapshot 
      let branchName = branch.key as! String 
      print("\(branchName)") 
     } 

    } 

enter image description here

{ "Users" : { 
"6dICrkbVVJWzVZ00Vq4y9Fm2Qcg2" : { 
    "branches" : { 
    "branch1" : true 
    }, 
    "isAdmin" : true 
}, 
"M0C1XUyboPg5zbgQi24nh3SlJri1" : { 
    "branches" : { 
    "branch2" : true 
    } 
} },"branches" : { 
"branch1" : { 
    "address" : "NDG", 
    "campaigns" : { 
    "valentine's day" : true 
    }, 
    "manager" : "y", 
    "rate" : { 
    "average" : 0, 
    "bad" : 0, 
    "good" : 0 
    }, 
    "users" : { 
    "6dICrkbVVJWzVZ00Vq4y9Fm2Qcg2" : true, 
    "M0C1XUyboPg5zbgQi24nh3SlJri1" : { 
     "isAdmin" : true 
    } 
    } 
}, 
"branch2" : { 
    "address" : "downtown montreal", 
    "manager" : "x", 
    "rate" : { 
    "average" : 0, 
    "bad" : 0, 
    "good" : 0 
    }, 
    "users" : { 
    "M0C1XUyboPg5zbgQi24nh3SlJri1" : true, 
    "Z6b5WalkNWZLMVdwGPHi3vSvSRU2" : { 
     "isAdmin" : true 
    } 
    } 
} }, "campaigns" : { 
"valentine's day" : { 
    "branches" : { 
    "branch1" : true 
    } 
} }} 

と支社を取得するための作業コードであるを取得することができます正しい結果(NDG)を印刷します

セキュリティルール:

{ "rules": { 
"Users":{ 
    "$uid":{ 
    ".read":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true", 
    ".write":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true" 


    } 

}, "branches":{ 
"$branchId":{ 
".read" : "auth.uid == true || root.child('Users').child(auth.uid).child('isAdmin').val()==true || root.child('branches').child($branchId).child('users').child(auth.uid).exists()", 
     ".write" : "auth.uid == true || root.child('Users').child(auth.uid).child('isAdmin').val()==true || root.child('branches').child($branchId).child('users').child(auth.uid).child('isAdmin').val()==true" 

}}}} 
+1

あなたはbranch1を観察している場所で動作する質問にコードを追加できますか?また、イメージやリンクではなく、ファイアベース構造をテキストとして投稿することをお勧めします。そうすれば、それは検索可能であり、答えるときにそれを再入力する必要はありません。最も重要なことは、誰かが画像の変更をホストしている場合、それは質問を破ります。だからそれをテキストとして含めることに固執する。 – Jay

+0

ありがとうございました@ジェイ、私はそうする – Annie

+0

あなたはセキュリティルールの関連部分を投稿することはできますか? '/ branches'は**読み込み不可ではなく、/ branches/$ branchID'は読み込み可能ではないようです。 – vzsg

答えて

0

@vzsgのおかげで、この問題は許可とルールの問題であることがわかりました。だから私はルールを変更し、結果を簡単に取得しました。

{ "rules": { 
     "Users":{ 
     "$uid":{ 
    ".read":"auth.uid == $uid ||  root.child('Users').child(auth.uid).child('isAdmin').val()==true", 
    ".write":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true" 


    } 

}, "branches":{ 
     ".read": " root.child('Users').child(auth.uid).child('isAdmin').val()==true" , 
     ".write" : "root.child('Users').child(auth.uid).child('isAdmin').val()==true ", 

"$branchId":{ 
    ".read": " root.child('branches').child($branchId).child('users').child(auth.uid).exists()", 
    ".write" : "root.child('branches').child($branchId).child('users').child(auth.uid).child('isAdmin').val()==true" 

}} }} 
関連する問題