قوانین امنیتی برای عملیات خط لوله

هدف اصلی پشتیبانی از قوانین پرس‌وجوهای Pipeline، تطبیق با قابلیت‌های فیلترینگ موتور Rules موجود است. در حالی که پرس‌وجوهای Pipeline مجموعه‌ای غنی از ویژگی‌ها را ارائه می‌دهند، موتور Rules محدود به تشخیص فیلترهای ساده است تا از رضایت‌بخشی و امنیت پرس‌وجو اطمینان حاصل شود.

عبارات فیلتر پشتیبانی شده

برای اینکه یک پرس‌وجو توسط قوانین شما محدود شود، باید از عملگرهای مقایسه‌ای استاندارد در برابر ثابت‌ها استفاده کند. انواع فیلترهای زیر توسط موتور قوانین شناخته می‌شوند:

  • برابری و نابرابری: 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 : به شناسه کاربری (uid) و داده‌های توکن (token) دسترسی دارد.
  • 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() ) جفت شود که بتوان آن را با قوانین تأیید کرد.