2017-10-10 13 views
9

ユーザーの電子メールアドレスに基づいて、ドキュメント自体のドキュメントをユーザーが読み取ることを許可されている場合は、保存します。複数のユーザーが同じ文書にアクセスできる必要があります。マップ値に基づくFirestoreのセキュリティルール

the documentationによると、Firestoreでは配列メンバーの照会が許可されていません。だから私は電子メールアドレスをキーとしてユーザーの電子メールアドレスをString-Bool Mapに保存しているのです。

次の例では、電子メールをマップキーとして使用していません。これは、基本文字列ではすでに機能していないためです。

データベース構造は以下のようになります。

lists 
    list_1 
    id: String 
    name: String 
    owner: E-Mail 
    type: String 
    shared: 
     test: true 

すべてのセキュリティルールがここにリストされています:

service cloud.firestore { 
    match /databases/{database}/documents { 
    match /lists/{listId=**} { 
     allow read: if resource.data.shared.test == true 
    } 
    } 
} 

編集:私はmatch /lists/{listId}代わりのmatch /lists/{listId=**}

を使用する場合にも動作しません。

私はそれを理解していますが、shared[test]の値が真であれば、このセキュリティルールは全員に読み取りアクセスを許可しなければなりません。 completnessの便宜上

:私はセキュリティルールからマップ値にアクセスできないことを推測している

collection.whereEqualTo("shared.test", true).get() 
     .addOnCompleteListener(activity, { task -> 
      if (task.isSuccessful) { 
       Log.i("FIRESTORE", "Query was successful") 
      } else { 
       Log.e("FIRESTORE", "Failed to query existing from Firestore. Error ${task.exception}") 
      } 
     }) 

:これは私が使用しているクエリ(Android上Kotlin)があります。だから、私の問題の代替解決策は何でしょうか?

Firestore rules referenceには、resource.data.property == 'property'のように地図にアクセスできると書かれていますので、間違っていますか?

+0

私がresource.dataで見たすべての例は、**ワイルドカード構文を持っていないので、resource.dataは 'match/lists/{listId}'の代わりに 'match/lists/{listId = **} '?試してみる価値のあるもの。 – Scarygami

+0

いいえ、残念ながらこれもうまくいきません。 –

+0

ええと...私は正直です。これは正常に動作するはずです。誤ってデータを保存したり、Cloud Firestoreの代わりにRealtime Databaseにルールを編集したりしていないことを最初に確認できますか? (これは時々起こります)また、これをクエリにしておらず、個々のドキュメントを取得しようとするとどうなりますか? –

答えて

9

編集:この問題は修正されました。あなたがまだそれを見ているなら(それはルールエバリュエーターのバグだと確信しています)、コメントに私に教えてください。

あなたが直面している問題についてここでお話しましたが、セキュリティルール自体に問題があるようです。本質的に、この問題は、あなたがやっていることのように、クエリのネストされたフィールドを評価することに特有のようです。

基本的に、あなたがやっていることはうまくいくはずです。このクエリを動作させるためにFirestoreチームからの更新を待つ必要があります。私はこのことが起こったときにこの答えを更新することを覚えています。ごめんなさい!

+0

この場所や自分自身を確認するための更新はありますか?私もこの問題によってブロックされており、(データの再構成に手間がかからず)良い問題を抱えていません。 –

+2

まだ更新はありませんが、チームが積極的に取り組んでいることはわかっています。 –

関連する問題