Правила безопасности Firestore: использование get () в методе списка hasAny () - PullRequest
0 голосов
/ 27 марта 2020

Мне было интересно, возможно ли это правило безопасности:

function productForUser() {
        return resource.data.products.hasAny(get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.products);
    }

Когда я пытаюсь протестировать его на площадке тестирования на веб-сайте Firebase, оно оказывается успешным. Однако, когда я пытаюсь запустить его с Javascript, с помощью этого запроса я получаю отказ в чтении с «отсутствующими или недостаточными разрешениями»:

query.where("products", "array-contains", productId);

Я могу подтвердить, что У пользователя есть массив товаров, связывающийся с указанным c товаром, который ищется в запросе.

Заранее спасибо.

1 Ответ

1 голос
/ 27 марта 2020

Ваше правило работает в симуляторе консоли, потому что симулятор поддерживает только запросы типа "get" для одного документа. Это не работает для запросов, потому что правила безопасности не являются фильтрами . Правило не будет оцениваться для каждого документа в коллекции, поскольку это не будет хорошо масштабироваться для очень больших коллекций. Чтобы указать условия для запросов, вам нужно будет предоставить точные значения для проверки клиентом - вы не сможете использовать get () для поиска других значений.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...