Правило Firestore, чтобы определить, есть ли у ресурса атрибуты с определенным значением - PullRequest
0 голосов
/ 19 марта 2019

У меня есть три типа коллекций в моей базе данных.

  1. Пользователь
  2. Сообщение * * 1006
  3. Как

Я делаю «похожий» документ таким образом, чтобы в нем были атрибуты _user и _post, в которых соответственно хранятся идентификатор пользователя и сообщения.

В настоящее время я пишу правило базы данных таким образом, чтобы «подобный» документ не создавался, если уже существует документ со значением атрибута _user, когда пользователь пытается создать объект, и _post, у которого есть идентификатор, которым является пользователь. симпатия.

Как мне написать правило для этой ситуации?

1 Ответ

0 голосов
/ 19 марта 2019

Я не думаю, что в Firestore есть какие-либо правила, которые могли бы обеспечить это на данный момент.Но у меня есть некоторые предложения для альтернативных подходов:

1.Скопируйте идентификатор пользователя Like в Post с помощью облачной функции: Вы можете настроить облачную функцию Firebase, которая будет запускаться при операциях создания коллекции Like.Эта облачная функция записывает идентификатор пользователя в массив поста с именем like_users.Тогда у вас может быть правило, которое говорит:

разрешить создание: если request.auth.uid не в get (/ database / $ (база данных) / documents / Post / $ (request.resource.data._post).data.like_users;

(Единственная проблема с этим решением, я не думаю, что есть такая вещь, как «не в», это требует некоторых исследований)

2.Проверьте, есть ли дубликат с облачной функцией: Вы можете настроить облачную функцию Firebase, которая будет запускаться при операциях создания коллекции Like. В функции вы запрашиваете документы Like с тем же пользователем и идентификатором публикации.документ уже существует, вы удалили самый последний.

3. Перестройте базу данных: Вы можете удалить коллекцию Like и вместо нее иметь массив с именем like_users в коллекции Post.Для этого вам потребуется поместить правило, которое проверяет, существует ли пользователь в массиве «like_users», поэтому я думаю, что у нас может быть та же проблема, что и в альтернативе 1. Вам также понадобятся правила, говорящие о том, что пользователь не являетсяМы хотим обновить другие поля документа, что возможно.

...