Правила Firestore: массив карт

#firebase #google-cloud-firestore #firebase-security

#firebase #google-облако-firestore #firebase-безопасность

Вопрос:

У меня есть следующая архитектура в моих данных :

 roles :

    0 :
        id : xxx
        name : xxx
   
    1 :
        id : xxx
        name : xxx
  

Мне нужно правило, которое позволяет мне проверять, равен ли идентификатор пользователя одному из идентификаторов в массиве ролей, у кого-нибудь есть идея?

Спасибо и хорошего дня !

Ответ №1:

Это невозможно с данными, структурированными таким образом.

Одним из вариантов является дублирование значений «id» в поле массива, которое содержит только эти строки.

 roleIds:
  0: id-string-0
  1: id-string-1
  

Затем, чтобы проверить, есть ли id в этом списке, вы можете использовать hasAny:

 allow read: if resource.data.roleIds.hasAny([id]);
  

Комментарии:

1. Итак, решением было бы создать два списка, один с идентификаторами, а другой с именами?

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