Рассмотрим следующий сценарий:
Есть два пользователя: 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
не должен.