Правила безопасности Google Cloud Firestore - правила для идентификатора документа

Если мы создадим новые идентификаторы документов на основе идентификатора пользователя Firebase Authentication (чтобы нам не нужно было запрашивать и получать документ непосредственно от известного идентификатора пользователя), можем ли мы создать правило безопасности, которое мы разрешили бы только пользователям, которые являются владельцами такой идентификатор пользователя Firebase Authentication для создания идентификатора документа с таким идентификатором пользователя? Например;

We have two users as follows:-

Firebase user ID: AAA
Firebase user ID: BBB

Expected results from Firestore security rules

AAA creates document ID: AAA-1 - (ok)
AAA creates document ID: AAA-2 - (ok)
AAA creates document ID: BBB-1 - (not ok)
AAA creates document ID: XYZ-1 - (not ok)

BBB creates document ID: AAA-1 - (not ok)
BBB creates document ID: AAA-2 - (not ok)
BBB creates document ID: BBB-1 - (ok)
BBB creates document ID: XYZ-1 - (not ok)

Можно ли установить такое правило в Firestore?

Если вы сохраните идентификатор пользователя в документе, то это простая задача. Поскольку у вас есть доступ к идентификатору пользователя в правилах безопасности

DauleDK 02.05.2018 07:54

Что, если пользователь переопределит идентификатор документа в браузере?

Ook 04.05.2018 11:27

Вы пишете правила безопасности, чтобы запретить и это.

Doug Stevenson 12.05.2018 04:05

Вы нашли решение? Я борюсь с той же проблемой

Harshit Agrawal 11.01.2019 07:43
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
2
4
438
2

Ответы 2

Гораздо лучше добавить поле владельца в документ, которому вы назначаете идентификатор пользователя, создавшего документ, а затем просто проверьте это поле при обновлении, например.

allow update: if resource.data.owner == request.auth.uid

Вы можете получить идентификатор целевого документа запроса с помощью request.resource.id в соответствии с документация. Затем вы можете сравнить его с запросом идентификатора пользователя auth с чем-то вроде allow create: if request.resource.id == request.auth.uid, чтобы ограничить разрешение.

В симуляторе не удается выполнить действие создания, хотя оно хорошо работает для обновления или действия удаления.

Harshit Agrawal 11.01.2019 07:42

Другие вопросы по теме