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

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

Моя база данных выглядит так:

Коллекция заказов

 Order 1
    id: order1
 Order 2
    id: order2

Коллекция OrderLines

 ljsdfozdkfjz
    order: order1
 ozjehfeofheof
    order: order1
 ojezihfoekfjf
    order: order32
 pjeopajfoekfss
    order: order69

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

Я пробовал это правило безопасности:

service cloud.firestore {
  match /databases/{database}/documents {
    match /OrderLines/{OrderLinesId=**} {
        allow read: if resource.data.order == get(/databases/$(database)/Orders/{OrderId}).data.id;
    }
  }
}

, но оно не работает

1 Ответ

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

Существуют некоторые ограничения правил безопасности, о которых вам следует знать.Во-первых, вы не можете выполнить запрос в правилах.Вы можете только указать, что вы хотите прочитать один документ.Вы должны иметь возможность ссылаться на этот документ по его уникальному пути.Читать всю коллекцию невозможно.Во-вторых, вы ограничены 10 чтениями документов на правило.

Учитывая ваши текущие настройки, невозможно написать правило, отвечающее вашим потребностям.Возможно, вы захотите рассмотреть другую (дополнительную) структуру базы данных, возможно, такую, которая требует один документ с полем, с которым нужно проверять массив значений.

...