Правила безопасности при эксплуатации трубопроводов

Основная цель поддержки правил в запросах 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() ), который может быть проверен с помощью правил.