2017-05-23 1 views
0

私は次のような場合があります。すでにノードが存在する場合、そのノードを更新(上書き)するためのアクセスを拒否することはできますか?例えば、友人への追加要求は、私が望むように、この機能はデータベース内でルールを設定するため一度実行されましたが、機能しません。どのようにこれを修正することができますか?Firebaseデータベースでノードを作成した後、変更へのアクセスを禁止するにはどうすればよいですか?

ルール

// friends 
     "friends": { 
     "$ownerID": { 
      "friendIncomingRequests": { 
      "$secondUserID": { 
       ".write": "!data.exists()" // Only allow new nominations to be created 
      } 
      }, 
      "friendOutgoingRequests": { 
      "$secondUserID": { 
       ".write": "!data.exists()" // Only allow new nominations to be created 
      } 
      } 
     } 
     } 

データ

"friends" : { 
    "8OdvaGQfMVdJrlCxdc5pOaj09hy2" : { 
     "friendOutgoingRequests" : { 
     "mp9pfsfVQKavwYddjYYPC5Ja9N93" : { 
      "timeStamp" : 1.495514876872129E9, 
      "userID" : "mp9pfsfVQKavwYddjYYPC5Ja9N93", 
      "userName" : "Tim C." 
     } 
     } 
    }, 
    "mp9pfsfVQKavwYddjYYPC5Ja9N93" : { 
     "friendIncomingRequests" : { 
     "8OdvaGQfMVdJrlCxdc5pOaj09hy2" : { 
      "senderID" : "8OdvaGQfMVdJrlCxdc5pOaj09hy2", 
      "senderName" : "Alexsander K.", 
      "timeStamp" : 1.495514876872129E9 
     } 
     } 
    } 
    }, 

更新 私はルールでも、このコードを持っているので、問題は、このコードではあると思います。しかし、どうすれば修正できますか?

"rules": { 
    ".read": "auth != null", 
    ".write": "auth != null", 
} 

アップデート1:ここではすべてのルールがあります。私は友人だけに特定の書き込みルール(更新)を作成する必要があります。私はルールの個々のブランチごとに例を見ましたが、あるブランチに対していくつかの特定のルールを実行する必要がある場合は、標準のルールが必要です。

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null", 



     // card location 
    "cardLocation": { 
     // Allow anyone to read the GeoFire index 
     //".read": true, 
     // Index each location's geohash for faster querying 
     ".indexOn": "g", 

    }, 

     "cards": { 
     ".indexOn": "ownerID" 
     }, 

     "userListEvents": { 
      "$uid": { 
      ".indexOn": "isConfirmed" 
      } 
     }, 

     "userImages": { 
     "$uid": { 
      "userProfileImages": { 
          ".indexOn": "isoDate" 
      } 
     } 
     }, 

     // tags 
     "userTags": { 
     "$uid": { 
      ".indexOn": "isSelected" 
     } 
     }, 


     // people search 
     // 
     "userLocations": { 
      ".indexOn": "g" 
     }, 


     // friends 
     "friends": { 
     "$ownerID": { 
      "friendIncomingRequests": { 
      "$secondUserID": { 
       ".write": "!data.exists()" 
      } 
      }, 
      "friendOutgoingRequests": { 
      "$secondUserID": { 
       ".write": "!data.exists()" 
      } 
      } 
     } 
     } 

    } 
} 
+0

私はちょっと混乱しています。最初のルールに追加のルールを追加して、それがどのように見えるかを正確に見ることができますか?私はあなたのための解決策があるかもしれないと思うが、その明確化が助けになるだろう。 –

+0

@JenPersonこんにちは!私はすべてのデータベースルールを書きました。見てください。どうもありがとうございます! – Alexander

+0

ありがとうございます!ああ、そしてもう一つ:あなたはそれが動作しないと言うとき、テストでは、書き込みは常に許可される、または許可されていないことを意味しますか? –

答えて

1

私はルールでも、このコードを持っているので、問題は、このコードではあると思います。しかし、どうすれば修正できますか?

"rules": { 
    ".read": "auth != null", 
    ".write": "auth != null", 
} 

はい、あなたの考えは正しいです。 Firebase .readおよび.writeルールカスケード。したがって、データ構造の各子ノードにはすべて.read.writeを置く必要があります。何かのように:

{ 
    "rules": { 
    //skip this 
    "someNode": { 
     ".read": "auth != null", 
     ".write": "auth != null" 
    }, 
    // friends 
    "friends": { 
     "$ownerID": { 
     "friendIncomingRequests": { 
      "$secondUserID": { 
      ".write": "!data.exists()" 
     } 
     }, 
     "friendOutgoingRequests": { 
      "$secondUserID": { 
      ".write": "!data.exists()" 
      } 
     } 
     } 
    } 
    //... 
    } 
} 
+0

はい、私はそうしました、私はちょうど例外として1つのブランチを作るためのより良い解決策があるかもしれないと思った。 – Alexander

+0

答えは子供のための例外ではありません:D –

+0

私は知っています:)しかし、私はそうし、それは私のために働く – Alexander

関連する問題