Почему правило облачного пожарного хранилища не соответствует моему шаблону пути? - PullRequest
1 голос
/ 20 марта 2019

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

enter image description here

service cloud.firestore {
  match /databases/{database}/documents {

    match /userPrivate/{user=**} {
      allow read, write: if request.auth.uid == user;
    }

  }
}

enter image description here

enter image description here

Ответы [ 2 ]

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

Вы не указываете документ для получения правильно.В текстовое поле, в котором вас просят указать местоположение документа, не добавляйте /databases/(default)/documents.Это добавляется для вас автоматически.Вы должны указать путь к документу, используя коллекцию и идентификатор документа.Например: /userPrivate/uid, где "uid" - это идентификатор документа.Возможно, вам также следует включить аутентификацию в симуляторе, чтобы идентификатор совпадал.

Также имейте в виду, что при использовании сопоставления с подстановочным знаком с двумя звездами, такими как /userPrivate/{user=**}, переменная user будет содержатьвесь путь документа, включая любые подколлекции.Это означает, что ваше правило не будет работать для документов в подколлекциях.

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

Вам необходимо изменить свои правила следующим образом:

service cloud.firestore {
  match /databases/{database}/documents {

    match /userPrivate/{user} {
      allow read, write: if request.auth.uid == user;
    }

  }
}

Ваш шаблон должен указывать на документ с одним путем (что вы и получаете, делая {user}), ине совпадает ни с одним документом из коллекции userPrivate (что вы и получаете, делая {user=**}, другими словами "остальную часть пути").

В случае, если вы хотите разрешить пользователюДля чтения / записи всех документов, включенных во вложенные коллекции документов user с одинаковым уровнем безопасности, будет действовать следующее правило:

service cloud.firestore {
  match /databases/{database}/documents {

    match /userPrivate/{user} {
      allow read, write: if request.auth.uid == user;

      match /{userCollec=**} {
        allow read, write: if request.auth.uid == user;
      }

    }

  }
}

Я бы посоветовал вам посмотреть это официальное видео Firebase в Firestoreправила безопасности: https://www.youtube.com/watch?v=eW5MdE3ZcAw&, в частности, часть начинается с 5 минут.

...