Правило Firestore: соответствует коллекции верхнего уровня - PullRequest
0 голосов
/ 12 апреля 2020

Настройка:

  • Моя самая большая коллекция называется users
  • Каждый user назван по своему уникальному идентификатору, uid
  • Я хочу создать правило, чтобы независимо от того, к какому документу или подгруппе обращаются, будет сравниваться uid с именем текущего user в пользователях, чтобы разрешить

Текущая попытка:

  • Обратите внимание, что это РАБОТАЕТ для верхнего уровня documents, но, как только я пытаюсь работать с вложенной коллекцией в этом пользователе, происходит сбой
  • Если это имеет значение , будет 7 именованных вложенных коллекций, которые всегда одинаковы между пользователями

    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /users/{user} {
          function isSignedIn() {
            return request.auth.uid != null;
          }
    
          allow read, write: if isSignedIn() && request.auth.uid == user
        }
      }
    }
    

Любая помощь будет принята с благодарностью. Я думаю, мне нужно добавить куда-нибудь **?

1 Ответ

1 голос
/ 12 апреля 2020

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

    match /users/{user}/{everything=**} {
      function isSignedIn() {
        return request.auth.uid != null;
      }
      allow read, write: if isSignedIn() && request.auth.uid == user
    }

В правилах версии 2 рекурсивные подстановочные знаки соответствуют 0 или больше отрезков пути.

...