Как использовать подстановочные знаки в правилах безопасности Firebase - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь использовать подстановочный знак в моих правилах безопасности Firebase, но он не работает, как описано в онлайн документации. enter image description here

Я хочу вернуть всю коллекцию itineraryList, но правила безопасности не работают.

match /itinerary/{userId=**}/itineraryList/{doc} {
  allow read: if request.auth.uid == userId; 
  allow write: if request.auth.uid == userId;
}

Какой правильный синтаксис здесь, чтобы предоставить аутентифицированным пользователям доступ ко всему списку?

1 Ответ

2 голосов
/ 16 июня 2019

Обновление после ваших комментариев:

Если вы хотите предоставить любому пользователю, прошедшему проверку подлинности, доступ на чтение ко всем документам в коллекции itinerary (включая вложенные коллекции), выполните следующие действия:

service cloud.firestore {
  match /databases/{database}/documents {
      match /itinerary/{docId=**} {
          allow read: if request.auth.uid != null;
      }   

      //possibly add another rule for write

  }
}

Первоначальный ответ:

Это потому, что при выполнении {userId=**} вы используете " рекурсивный подстановочный синтаксис", см. https://firebase.google.com/docs/firestore/security/rules-structure#recursive_wildcards. Он будет соответствовать "всему совпадающему сегменту пути".

Вы должны сделать:

service cloud.firestore {
  match /databases/{database}/documents {
      match /itinerary/{userId}/itineraryList/{doc} {
        allow read: if request.auth.uid == userId; 
        allow write: if request.auth.uid == userId;
      }  
  }
}

Вы также можете посмотреть это официальное видео Firebase о правилах безопасности Firestore, в котором объясняется этот момент, среди прочего: https://www.youtube.com/watch?v=eW5MdE3ZcAw

...