Основная цель поддержки правил в запросах Pipeline — обеспечить соответствие возможностям фильтрации существующего механизма правил. В то время как запросы Pipeline предлагают богатый набор функций, механизм правил ограничен распознаванием простых фильтров для обеспечения удовлетворенности запросов и безопасности.
Поддерживаемые выражения фильтра
Для того чтобы запрос соответствовал вашим правилам, он должен использовать стандартные операторы сравнения с константами. Механизм правил распознает следующие типы фильтров:
- Равенство и неравенство:
eq,neq. - Сравнения:
gt,gte,lt,lte. - Membership:
in,arrayContains.
Вот несколько примеров:
-
where(eq("foo", 2)) -
where(lt("foo", 2)) -
documents("/user/1", "/user/2").where(...)
Запрос свойств
Вы можете продолжать использовать объект request для проверки аутентификации и контекста запроса, хотя некоторые свойства, доступные в стандартных запросах, не поддерживаются в конвейерах обработки данных.
Поддерживаемые свойства
The new engine continues to support the following properties:
-
request.auth: Доступ к данным uid пользователя и токена. -
request.method: Определяет операцию (например,get,list). -
request.path: Путь к ресурсу, к которому осуществляется доступ. -
request.time: Временная метка запроса, отображаемая на стороне сервера.
Неподдерживаемые свойства
Свойства request.query , такие как limit , offset и orderBy не поддерживаются для проверок правил Pipelines из-за сложности определения этих значений в многоэтапных запросах.
Обработка этапов конвейера и права доступа
Существуют различные этапы конвейера, которые соответствуют конкретным детальным операциям в правилах безопасности:
-
allow listразрешений: Запускается на этапахcollection(),collectionGroup()иdatabase(). -
allow getразрешений: Запускается этапомdocuments(), который обрабатывается аналогично пакетной операцииgetданных. - Этапы изменения полей: Правила работают только с сохраненными данными, а не с производными значениями. Если конвейер включает этапы, изменяющие поля (например,
AddFields,ReplaceWith,Select), механизм правил прекращает применение ограничений фильтрации после прохождения этого этапа. - Этап литералов: Этап
literals()не считывает данные из базы данных, но может повлечь за собой дополнительные затраты. Для предотвращения злоупотреблений его необходимо использовать в паре с другим этапом (например,collection()), который может быть проверен с помощью правил.