Cloud Firestore و Realtime Database هر دو بر زبانهای قواعد قدرتمند و مختصر تکیه میکنند که به طور خاص برای کنترل امنیت اطلاعات و کنترل دسترسی ایجاد شدهاند. با این حال، از آنجایی که قوانین طولانی تر و پیچیده تر می شوند، ممکن است برای رفع اشکال در رفتار آنها به کمک نیاز داشته باشید.
شبیه سازهای Firebase دارای توانایی تولید گزارش های پوشش قانون هستند، بنابراین می توانید ببینید که هر عبارت فرعی هنگام بازتولید یک خطا دقیقاً به چه چیزی ارزیابی می شود. این گزارشها همچنین اطلاعاتی در مورد تعداد دفعات استفاده از یک قاعده در هر مورد آزمایشی، مانند تکنیکهای سنتی «پوشش خط» ارائه میکنند.
گزارش ایجاد کنید
پس از اجرای مجموعهای از آزمایشها، میتوانید به گزارشهای پوشش آزمایشی دسترسی پیدا کنید که نشان میدهد هر یک از قوانین امنیتی شما چگونه ارزیابی شده است.
برای دریافت گزارشها، در حین اجرای شبیهساز، یک نقطه پایانی در معرض نمایش را جستجو کنید. برای یک نسخه مرورگر پسند، از URL زیر استفاده کنید:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Realtime Database
http://localhost:9000/.inspect/coverage?ns=<database_name>
این قوانین شما را به عبارات و عبارات فرعی تبدیل می کند که می توانید برای اطلاعات بیشتر، از جمله تعداد ارزیابی ها و مقادیر برگردانده شده، ماوس را روی آن قرار دهید. برای نسخه خام JSON این داده، URL زیر را در جستار خود قرار دهید:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
Realtime Database
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
اشکال زدایی قوانین نمونه
برای ایجاد آسان یک گزارش آزمایشی، از شبیه سازهای شروع سریع موجود در GitHub برای Cloud Firestore و Realtime Database استفاده کنید. این شروعهای سریع شما را از طریق نصب صحیح و مقداردهی اولیه شبیهسازها، و سپس تولید آزمایشهای نمونه از یک مجموعه نمونه از قوانین راهنمایی میکنند.
یک برنامه نمونه با استفاده از Cloud Firestore را در نظر بگیرید که تعداد دفعاتی را که کاربران روی یک دکمه کلیک می کنند را محاسبه می کند. این برنامه از قوانین زیر استفاده می کند:
Cloud Firestore
service cloud.firestore { match /databases/{database}/documents { match /counters/{counter} { allow read; allow write: if request.resource.data.value == resource.data.value +1; } } }
برای رفع اشکال خطاهای قوانین نشان داده شده در بالا، از نمونه تست جاوا اسکریپت زیر استفاده کنید:
const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));
شبیه ساز گزارشی را در URL ذکر شده در بالا ایجاد می کند:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
گزارش خطاهای تعریف نشده و با مقدار صفر زیر را نشان می دهد:
مشکل این مثال خاص این است که قوانین بین ایجاد سند و بهروزرسانی سند تفاوتی قائل نمیشوند. در نتیجه، نوشتن مجاز نیست اگر سند وجود نداشته باشد، و سند نمی تواند ایجاد شود زیرا وجود ندارد. تمایز "نوشتن" به دو عملیات خاص دیگر - "ایجاد" و "به روز رسانی" - مشکل را حل می کند.
Cloud Firestore
service cloud.firestore { match /databases/{database}/documents { match /counters/{counter} { allow read; allow create: if request.resource.data.value == 0; allow update: if request.resource.data.value == resource.data.value +1; } } }
گزارش تولید شده نشان می دهد که هر قانون چند بار استفاده شده است و چه مواردی برگردانده شده است.