2017-10-19 29 views
2

まず、アレイ内のユーザーのIDを検索、私のひどい英語のため申し訳ありませんが、それは私の母国語ではありません...Firestoreセキュリティルール:ドキュメント

私はFirestoreを使用して、Firebaseでシンプルなアプリを構築していますデータベース。私のアプリでは、ユーザーは小グループのメンバーです。彼らは他のユーザーのデータにアクセスできます。 あまりにも多くのドキュメント(グループのドキュメントのサブコレクション内のユーザーあたり1つ)を照会しないために、ユーザーのデータをグループのドキュメント内の配列に追加することを選択しました。ここ は、私のグループのドキュメントです:

{ 
    "name":"fefefefe", 
    "days":[false,false,false,false,true], 
    "members":[ 
     {"email":"[email protected]","id":"aaaaaaaa","name":"Mavireck"}, 
     {"email":"[email protected]","id":"bbbbbbbb","name":"Mavireck2"}, 
    ], 
} 

ユーザーがグループ内にある場合、私はセキュリティルールに確認できますか? 代わりにオブジェクトを使用する必要がありますか? フリークォータの制限に達しすぎるので、私は本当にユーザーのサブコレクションを使用したくないです...

ありがとうございます!

編集: お返事ありがとうございます。 Iオブジェクトに変更されます。 "メンバー":{UID1:{}、UID2:{}}

答えて

3

を一般的には、次のようなルールを記述する必要があります。

service cloud.firestore { 
    match /databases/{database}/documents { 
    match /collection/{documentId} { 
     // works if `members` = [uid1, uid2, uid3] 
     // no way to iterate over a collection and check members 
     allow read: if request.auth.uid in resource.data.members; 
     // you could also have `members` = {uid1: {}, uid2: {}} 
     allow read: if resource.data.members[request.auth.uid] != null; 
    } 
    } 
} 

あなたは可能性がありまた、サブコレクションを使用します。

service cloud.firestore { 
    match /databases/{database}/documents { 
    // Allow a user to read a message if the user is in the room 
    match /rooms/{roomId} { 
     match /documents/{documentId} { 
     allow read: if exists(/databases/$(database)/documents/documents/$(documentId)/users/$(request.auth.uid)); 
     } 
     match /users/{userId} { 
     // rules to allow users to operate on a document 
     } 
    } 
    } 
} 
+0

ありがとうございましたが、私はそれを動作させることはできません...私は私のデータベースが正しいことをかなり確信している:私はより多くのユーザーにオブジェクトを含む、グループのドキュメント内のオブジェクト「メンバー」を持っています情報。 : 'members = {uid1:{}、uid2:{}}'。しかし、 'allow read:if resource.data.members [request.auth.uid]!= null;'を使うと動作しません。また、私は 'resource.data.members [request.auth.uid] .name!= null;'と 'resource.data.members [(request.auth.uid)]!= null;'を試しました。 – Mavireck

+0

私は単純でした{console.log( "not null})' ...これは常にログに記録されます。 nullではありません " – Mavireck

+0

私は編集できませんので、ここで最後のコメントです:' 'allow read:if resource.data.membres [(request.auth.uid)]!= null; resource.data.membres!= null; 'はそうです。 – Mavireck

関連する問題