Reguły zabezpieczeń dotyczące operacji w potoku

Głównym celem obsługi reguł zapytań potokowych jest dopasowanie możliwości filtrowania do istniejącego silnika reguł. Zapytania potokowe oferują bogaty zestaw funkcji, ale silnik reguł jest ograniczony do rozpoznawania prostych filtrów, aby zapewnić możliwość spełnienia zapytania i bezpieczeństwo.

Obsługiwane wyrażenia filtra

Aby zapytanie było ograniczone przez Twoje reguły, musi używać standardowych operatorów porównania w odniesieniu do stałych. Silnik reguł rozpoznaje te typy filtrów:

  • Równość i nierówność: eq, neq.
  • Porównania: gt, gte, lt, lte.
  • Członkostwo: in, arrayContains.

Oto przykłady:

  • where(eq("foo", 2))
  • where(lt("foo", 2))
  • documents("/user/1", "/user/2").where(...)

Właściwości żądania

Nadal możesz używać obiektu request do weryfikowania uwierzytelniania i kontekstu zapytania, chociaż niektóre właściwości dostępne w standardowych zapytaniach nie są obsługiwane w potokach.

Obsługiwane właściwości

Nowy silnik nadal obsługuje te właściwości:

  • request.auth: dostęp do identyfikatora użytkownika i danych tokena.
  • request.method: wskazuje operację (np. get, list).
  • request.path: ścieżka zasobu, do którego uzyskuje się dostęp.
  • request.time: sygnatura czasowa żądania po stronie serwera.

Nieobsługiwane właściwości

Właściwości request.query, takie jak limit, offsetorderBy, nie są obsługiwane w przypadku sprawdzania reguł potoków ze względu na złożoność określania tych wartości w zapytaniach wieloetapowych.

Obsługa etapów potoku i uprawnienia

Istnieją różne etapy potoku, które są powiązane z określonymi szczegółowymi operacjami w regułach zabezpieczeń:

  • Uprawnienia allow list: wywoływane na etapach collection(), collectionGroup()database().
  • allow get uprawnienia: wywoływane przez etap documents(), który jest traktowany podobnie jak operacja wsadowa get.
  • Etapy modyfikacji pól: reguły działają tylko na przechowywanych danych, a nie na wartościach pochodnych. Jeśli potok zawiera etapy, które modyfikują pola (np. AddFields, ReplaceWith, Select), po napotkaniu takiego etapu silnik reguł przestaje stosować ograniczenia filtra.
  • Etap literałów: etap literals() nie odczytuje danych z bazy danych, ale może generować koszty. Aby zapobiec nadużyciom, musi być połączony z innym etapem (np. collection()), który można zweryfikować za pomocą reguł.