Правила безопасности Firebase, обеспечивающие только одно удаление массива и только userId - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть записи уведомлений, где есть текст и список пользователей (максимум 10).

{text: "Beware of the dog", users: [ uid1, uid2, uid3, ... ]}

Когда пользователь читает / подтверждает уведомление, я хочу удалить его из списка пользователей, которые могут видеть уведомление (тогда он больше не будет получать).

Для этого, когда пользователь нажимает кнопку «Скрыть уведомление», он отправляет запрос на обновление записи уведомления с помощью:

users: FieldValue.arrayRemove(uid)

Я хочу добавить правила безопасности, которые пользователь:

  • Не меняет другую часть записи уведомления.
  • Отправьте его uid и только его uid в части arrayRemove.

Пробовал с

allow update: if 
    request.auth.uid != null 
    && request.auth.uid in resource.data.users 
    && request.resource.size() == 1 
    && request.resource.data.users != null;
  • request.resource.size == 1 не работает.Не могу понять, почему, поскольку у меня есть только одно поле в моем запросе.
  • У меня нет способа гарантировать, что arrayRemove строго ограничен его uid.

Любой намек, помощь, идея высоко ценится.

1 Ответ

0 голосов
/ 19 февраля 2019

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

Я бы рекомендовал создать вложенную коллекцию, в которой каждый UID хранится в отдельном документе.В этой подгруппе вы можете реализовать свое требование, разрешив пользователю удалять только собственный документ.

...