2017-11-30 3 views
1

Cloud Firestoreのセキュリティルールを試しています。ドキュメントフィールドをフィルタリングすることは可能ですか?ドキュメントセキュリティルールを使用して文書のフィールドをフィルタリングする方法

{ 
    name: "John Doe", 
    email: "[email protected]" 
} 

を持っている場合、例えば

は、一部のユーザーは、電子メールアドレスを使用してドキュメントを取得することはできません。彼らのアプリケーションが

firebase.firestore.doc('users/doe-uid') 

でドキュメントを要求し、yesの場合、この文書

{ 
    name: "John Doe", 
} 

を取得し、どのように?

私はCloud Firestore Security Rules Referenceは、最初の文(強調は私です)で述べているので、それは可能なはずだと思う:

クラウドFirestoreセキュリティの規則を読んでいる者を決定し、に保存されているコレクションや文書へのアクセスを書き込むために使用されていますクラウドFirestore、文書の構造化方法、にはどのフィールドと値が含まれていますか

しかし、参考文献でフィールドをフィルタリングする方法を教えてもらえませんでした。

答えて

2

Firestoreのルールはフィルタではなく、ドキュメントクエリのサーバー側の検証であり、特定のフィールドではなくドキュメント全体にアクセスする(またはそうでない)ことを意味します。

あなたが言及したドキュメントは、フィールドでデータ検証ができることを意味します。ここ は(request.resource.dataを介して)書き込みクエリにデータを検証ルールの基本的な例である:ここ

match /users/{userId} { 
    allow write: if request.resource.data.age is int; 
} 

は(resource.dataを介して)読み出しクエリを検証するために、既存のフィールドを使用する別の基本的な例である:

match /articles/{articleId} { 
    allow read: if resource.data.isPublished == true; 
} 

フィールドをフィルタリングするには、クエリの後にクライアント側で行う必要があります。

今、特定のフィールドへのアクセスを保護するには、異なるルールセットを使用して別のコレクション(subcollectionsを参照)を作成し、これらのルールに一致する別のクエリを作成する必要があります。

+0

私はこれを受け入れ、2つの文書で公的データと私的データを分離し、今日は実用的なテストを展開しました。私はまだドキュメントが誤解を招くと思います。しかしそれは人生です。それを吸い込み、続けなさい。 – nalply

関連する問題