पाइपलाइन के ऑपरेशन के लिए सुरक्षा के नियम

पाइपलाइन क्वेरी के नियमों से जुड़ी सहायता का मुख्य मकसद, मौजूदा नियमों के इंजन की फ़िल्टर करने की क्षमताओं से मेल खाना है. पाइपलाइन क्वेरी में कई सुविधाएं उपलब्ध होती हैं. हालांकि, नियमों के इंजन में सिर्फ़ सामान्य फ़िल्टर को पहचानने की सुविधा होती है. इससे यह पक्का किया जा सकता है कि क्वेरी के नतीजे सही हों और सुरक्षा बनी रहे.

साथ काम करने वाले फ़िल्टर एक्सप्रेशन

किसी क्वेरी पर आपके नियमों के मुताबिक पाबंदी लगाने के लिए, उसमें कॉन्स्टेंट के ख़िलाफ़ स्टैंडर्ड तुलना ऑपरेटर का इस्तेमाल किया जाना चाहिए. नियम इंजन, इन फ़िल्टर टाइप को पहचानता है:

  • बराबर और बराबर नहीं है: eq, neq.
  • तुलनाएं: gt, gte, lt, lte.
  • सदस्यता: in, arrayContains.

यहां कुछ उदाहरण दिए गए हैं:

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

अनुरोध की प्रॉपर्टी

पुष्टि करने और क्वेरी के संदर्भ की पुष्टि करने के लिए, request ऑब्जेक्ट का इस्तेमाल जारी रखा जा सकता है. हालांकि, स्टैंडर्ड क्वेरी में उपलब्ध कुछ प्रॉपर्टी, पाइपलाइन में काम नहीं करती हैं.

इस्तेमाल की जा सकने वाली प्रॉपर्टी

नया इंजन, इन प्रॉपर्टी के साथ काम करता रहेगा:

  • request.auth: उपयोगकर्ता के यूआईडी और टोकन डेटा को ऐक्सेस करता है.
  • request.method: इससे ऑपरेशन की पहचान होती है. उदाहरण के लिए, get, list.
  • request.path: ऐक्सेस किए जा रहे संसाधन का पाथ.
  • request.time: अनुरोध का सर्वर-साइड टाइमस्टैंप.

ऐसी प्रॉपर्टी जिन्हें इस्तेमाल नहीं किया जा सकता

पाइपलाइन के नियमों की जांच के लिए, request.query प्रॉपर्टी काम नहीं करती हैं. जैसे, limit, offset, और orderBy. ऐसा इसलिए है, क्योंकि एक से ज़्यादा चरणों वाली क्वेरी में इन वैल्यू का पता लगाना मुश्किल होता है.

पाइपलाइन के स्टेज को मैनेज करना और अनुमतियां

पाइपलाइन के अलग-अलग चरण होते हैं. ये चरण, सुरक्षा नियमों में मौजूद खास कार्रवाइयों से जुड़े होते हैं:

  • allow list अनुमतियां: ये collection(), collectionGroup(), और database() चरणों के दौरान ट्रिगर होती हैं.
  • allow get अनुमतियां: यह documents() स्टेज से ट्रिगर होता है. इसे बैच get ऑपरेशन की तरह ही माना जाता है.
  • फ़ील्ड में बदलाव करने की प्रोसेस के चरण: नियम सिर्फ़ सेव किए गए डेटा पर लागू होते हैं, न कि निकाली गई वैल्यू पर. अगर किसी पाइपलाइन में ऐसे चरण शामिल हैं जो फ़ील्ड में बदलाव करते हैं (उदाहरण के लिए, AddFields, ReplaceWith, Select), तो उस चरण के बाद, नियमों का इंजन फ़िल्टर की शर्तों को लागू करना बंद कर देता है.
  • लिटरल स्टेज: literals() स्टेज, डेटाबेस से नहीं पढ़ता, लेकिन इससे लागत लग सकती है. इसका गलत इस्तेमाल रोकने के लिए, इसे किसी दूसरे चरण (जैसे कि collection()) के साथ जोड़ा जाना चाहिए. इसकी पुष्टि नियमों के हिसाब से की जा सकती है.