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, offset i orderBy, 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 etapachcollection(),collectionGroup()idatabase(). allow getuprawnienia: wywoływane przez etapdocuments(), który jest traktowany podobnie jak operacja wsadowaget.- 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ł.