2016-12-18 10 views
0

現在、Firebaseのセキュリティルールを作成して、ノードをnullに設定してそのノード内のすべてのデータを削除しないようにしています。 Firebaseデータベースのセキュリティルールの削除

この

は私のスキーマです

{ 
    "folder" : { 
    "item1" : { 
     "dataset1" : { 
     "data1" : 123, 
     "data2" : 456, 
     "data3" : 789 
     } 
    } 
    } 
} 

これらは私のルールです私は取得していシミュレータに組み込まれたこれらの結果使用し

{ 
    "rules": { 
    "folder": { 
// users cannot delete items in the node folder 
     ".write": "newData.exists()", 
// item is a variable 
     "$item": { 
     "dataset1": { 
//  dataset1 must have certain nodes and can't be deleted (set to null) 
      ".validate": "data.hasChildren(['data1', 'data2', 'data3']) && newData.exists()", 
      "data1": {".validate": "newData.isNumber()"}, 
      "data2": {".validate": "newData.isNumber()"}, 
      "data3": {".validate": "newData.isNumber()"}, 
//  using the variable $other means any node that isn't data1, data2, data3 is denied 
      "$other": {".validate": false} 
     } 
     } 
    } 
    } 
} 

The write is properly denied and doesn't let user set folder node to null

はこの作品をlocationは "/ folder/item1"と "/ folder/item1/data"に設定されています私はDATA1でより深いノードを持っていた場合、書き込みが許可されたため、SET1"

However when location is set to "/folder/item1/dataset1/data1" the write is allowed and the data is deleted.

は、それらはすべて削除されます。

読んでいただきありがとうございます。任意の回答を公開してください。スキーマを変更する必要はありません。

答えて

0

あなたが求めていることは本当にわかりません。しかし、あなたのルールにはいくつかの問題があるので、私はあなたの質問に答えることを期待してそれらを指摘します。

  1. あなたは/folderに書き込みアクセス権を与えます。これは低いレベルでは取り除くことができません。
  2. データが残っている限り、/folderは書き込みが許可されます。念頭に置くべきことは、書込み操作の後に存在するように、newDataがその場所のデータであることです。それは書かれた新しいデータだけではありません。
  3. .validateルールで削除を防止しようとしているという印象があります。データの削除時には検証は実行されないため、削除を防ぐために.validateルールを使用することはできません。

#2があなたの現在の問題を引き起こしていると思われます。

+0

こんにちは、私はポイント2であなたの推薦を使用しました。私は "newData.hasChildren([example、example])"を使用して、それらの子を削除できないようにしました。ご協力いただきありがとうございます! –

関連する問題