Правила безопасности Firestore для сбора в документе - PullRequest
0 голосов
/ 01 февраля 2020

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

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

collection ("подключения ") .document (Uid1) .collection (Uid2). (). ()

Я хочу разрешить доступ ко всему этому дереву для Uid1 и Uid2. Каково будет правило для этой функциональности?

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Вы должны использовать рекурсивный подстановочный синтаксис, {name=**}, как описано в do c.

service cloud.firestore {   
    match /databases/{database}/documents {
     // Matches any document in the cities collection as well as any document in a subcollection.
        match /cities/{document=**} {
           allow read, write: if <condition>;
        }   
     } 
}

При использовании рекурсивного синтаксиса с подстановочными знаками переменная с подстановочными знаками будет содержать весь совпадающий сегмент пути, даже если документ находится в глубоко вложенной подгруппе. Например, перечисленные выше правила будут соответствовать документу, расположенному в /cities/SF/landmarks/coit_tower, а значение переменной документа будет SF/landmarks/coit_tower.

Обратите внимание, что вам необходимо использовать правила версии 2.

0 голосов
/ 01 февраля 2020

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

    match /connections/{userId}/{document=**} {
        allow read: if request.auth.uid == userId;
    }

    match /connections/{otheruser}/{userId}/{document=**} {
        allow read: if request.auth.uid == userId;  
    }

...