Pipeline sorgu kuralları desteğinin temel amacı, mevcut kurallar motorunun filtreleme özellikleriyle eşleşmektir. Pipeline sorguları zengin bir özellik seti sunarken sorgu memnuniyetini ve güvenliğini sağlamak için kurallar motoru yalnızca basit filtreleri tanıyabilir.
Desteklenen Filtre İfadeleri
Bir sorgunun kurallarınızla kısıtlanması için sabitlere karşı standart karşılaştırma operatörleri kullanması gerekir. Aşağıdaki filtre türleri, kurallar motoru tarafından tanınır:
- Eşitlik ve Eşitsizlik:
eq,neq. - Karşılaştırmalar:
gt,gte,lt,lte. - Üyelik:
in,arrayContains.
Aşağıda bazı örnekler verilmiştir:
where(eq("foo", 2))where(lt("foo", 2))documents("/user/1", "/user/2").where(...)
İstek Özellikleri
Standart sorgularda kullanılabilen bazı özellikler kanallarda desteklenmese de kimlik doğrulama ve sorgu bağlamını doğrulamak için request nesnesini kullanmaya devam edebilirsiniz.
Desteklenen tesisler
Yeni motor aşağıdaki özellikleri desteklemeye devam eder:
request.auth: Kullanıcı UID'sine ve jeton verilerine erişin.request.method: İşlemi tanımlar (örneğin,get,list).request.path: Erişilen kaynağın yolu.request.time: İsteğin sunucu tarafı zaman damgası.
Desteklenmeyen özellikler
Çok aşamalı sorgularda bu değerlerin belirlenmesinin karmaşıklığı nedeniyle limit, offset ve orderBy gibi request.query özellikleri, ardışık düzen kuralı kontrollerinde desteklenmez.
Ardışık düzen aşaması işleme ve izinleri
Güvenlik kurallarında belirli ayrıntılı işlemlere karşılık gelen farklı işlem hattı aşamaları vardır:
allow listizinleri:collection(),collectionGroup()vedatabase()aşamaları tarafından tetiklenir.allow getizinleri:gettoplu işlemine benzer şekilde ele alınandocuments()aşaması tarafından tetiklenir.- Alan değişikliği aşamaları: Kurallar yalnızca depolanan veriler üzerinde çalışır, türetilmiş değerler üzerinde çalışmaz. Bir işlem hattı, alanları değiştiren aşamalar içeriyorsa (örneğin,
AddFields,ReplaceWith,Select), kurallar motoru bu aşama karşılaşıldıktan sonra filtre kısıtlamalarını uygulamayı durdurur. - Değişmez değerler aşaması:
literals()aşaması, veritabanından okuma yapmaz ancak maliyetlere neden olabilir. Kötüye kullanımı önlemek için, kurallar tarafından doğrulanabilen başka bir aşamayla (ör.collection()) eşleştirilmesi gerekir.