2017-12-10 10 views
2

ファイアストア文書 として以下のデータ構造を持っており、各参加者にセキュリティルールを設定したいと考えています。文書内の特定のフィールドを更新するファイアストアセキュリティ

{ 
event_name: 'XXX', 
created_by: 'userid' 
participants: { 
    userid_a: true, 
    userid_b: true, 
    userid_c: true, 
} 
} 

参加者は、参加者のユーザーIDを使用してコレクションを照会するための配列のようなデータとして設定されます。 そして、私は次のよう

const eventDoc = this.afs.doc('event/' + event_id); 
participant_obj = {} 
participant_obj[`participant_obj.${user_id}`] = true; 
eventDoc.update(participant_obj) 

次に、データを更新しています、私は のみ許可されたユーザーのみが、自分の参加者のステータスに更新できるというセキュリティルールを設定します。

match /event/{eventId} { 
match /participant_obj { 
    allow write: if request.resource.data.keys()[0] == request.auth.uid 
} 
} 

しかしparticipant_objparticipant_objがドキュメント内のデータだけで、コレクションの文書やパスのパスではありませんので、それは動作しません。

セキュリティを設定して文書内の特定のフィールドを更新するにはどうすればよいですか?

答えて

1

このようにはどうですか。

match /event/{eventId} { 
    allow write: if request.resource.data.participant_obj.keys()[0] == request.auth.uid 
       && request.resource.data.participant_obj.size() == 1 
} 
+0

ありがとうございました。それはよさそうだ! –

関連する問題