Правило безопасности Firestore для доступа к документам в коллекции на основе доступа пользователя к документам в другой коллекции - PullRequest
0 голосов
/ 05 июля 2018

Рассмотрим следующий сценарий:

Есть два пользователя: user-1 и user-2

Существует коллекция lists: /lists/{id}

Имеются следующие документы:

{ id: list-1, title: 'List 1', collaborators: { user-1: true } }
{ id: list-2, title: 'List 2', collaborators: { user-2: true } }
...

Существует также коллекция tasks: /tasks/{id}

Имеются следующие документы:

{ id: task-1, title: 'Task 1', listId: { list-1: true } }
{ id: task-2, title: 'Task 2', listId: { list-1: true } }
...

Теперь давайте рассмотрим, что user-1 пытается извлечь все задачи, относящиеся к list-1, используя следующий запрос:

firestore.collection('tasks').where('listId.list-1', '==', true).get()

И user-2 также пытается сделать то же самое, хотя он не является соавтором для list-1:

firestore.collection('tasks').where('listId.list-1', '==', true).get()

Мой вопрос: как мне написать правила безопасности, чтобы только user-1 мог получить доступ к задачам, принадлежащим list-1, а не user-2? Поле collaborators элемента списка должно использоваться для управления задачами, к которым пользователь имеет доступ.

Другими словами, user-1 должен иметь возможность извлекать задачи с идентификаторами task-1 и task-2, тогда как user-2 не должен.

...