1

をシミュレートする方法は、私のデータベースです:Firebaseルールシミュレータ:ここでプッシュ

{ 
    "lists": { 
    "list1_id_1": { 
     "field1": "some value", 
     "field2": "some value" 
    } 
    } 
} 

私は、すべてのユーザーが新しいリストを作成できるようにしたいが、既存のものを変更していないので、私は次の規則試してみました:

{ 
    "rules": { 
    "lists": { 
     ".read": "true", 
     ".write": "!data.exists()" 
    } 
    } 
} 

私は/lists/に次のデータを書き込もうとしたとき、これは動作しませんでした:

{ "field1": "qq", "field2": "ww" } 

どうやら、/lists /が既に存在するため、 ".write"ルールは書き込みに失敗しました。

だから私は、次の規則を試してみました:これはどちらか動作しませんでした

{ 
    "rules": { 
    "lists": { 
     ".read": "true", 
     "$list_id": { 
     ".write": "!data.exists()" 
     } 
    } 
    } 
} 

、Firebaseシミュレータは、書き込み操作を失敗したルールを選択しなかったので、私は「.WRITE」であるので、それはだと思います"リスト"には欠けている。

ここで私を助けてください。 私の問題は両方のルールと、シミュレータ内の/ lists /に新しい項目をプッシュしようとした方法と思われる。

P.S.私は、新しいデータをプッシュしようとすると、Firebaseによってlist_idが生成されることを知っていますが、この知識をどのようにシミュレータに使用するかはわかりません。

ありがとうございます! Slavik

答えて

0

ルールのあなたの第二セットは、仕事をする必要がありますが、あなたはシミュレータで、子IDを指定する必要がありますので、/listsノードの下にすべての子に

{ 
    "rules": { 
    "lists": { 
     ".read": "true", 
     "$list_id": { 
     ".write": "!data.exists()" 
     } 
    } 
    } 
} 

$list_id変数のポイント

simulator screenshot

:シミュレータの中、あなたは、失敗するべきか、すでに存在する子への書き込みをテストするために /lists/list1_id_1に場所を設定するような何かをする必要があります3210

push操作は、指定された場所に一意のIDを持つ子を作成します。これをシミュレートするには、存在しないことが分かっているランダムな子キーに場所を設定する必要があります(例:/lists/some-random-stringまたは/lists/-Kfg3YL0TS1X1SfQ9GGg)。

+0

しかし、シミュレータの/ lists /に新しい項目をプッシュして、ルールが正しいことを確認するにはどうすればよいですか? – user2145097

+0

'push'は、指定された場所に一意のIDを持つ子を作成しているだけです。だから、シミュレータでは、あなたが知っていることが分かっている子キー、 '/ lists/some-random-string'に位置を設定するだけです。シミュレータにはプッシュシミュレーションが組み込まれていませんが、これを行うことは事実上同じことです。私はこれで私の答えを更新しました。 – Grimthorr

関連する問題