باكند واحد للتطبيق واللوحة
عميل Flutter (أو Swift) ولوحة React على مشروع Supabase واحد. دخول، وقوانين صف، وتخزين. قاعدة ثانية للوحة غلط.

منتج جوال يحتاجه ناس يشغّلونه مو تطبيق وبعدين لوحة. هو باكند Supabase واحد وعميلين. الجوال Flutter، أو Swift إذا المنتج حق Apple. المكتب React. نفس المشروع.
مقالة اللوحة هي اللوحة اللي تشغّل منها. هالمقالة عن البيانات. نفس المثلث. شغل ثاني.
مشروع واحد، وعميلين
باكند تطبيق الجوال عندنا يعني قاعدة Postgres واحدة، ودخول واحد، وتخزين واحد. مو API للجوال وقاعدة ثانية للوحة. العميلين يستخدمون المفتاح العام وتوكن المستخدم. القاعدة تتصمم مرة.
Flutter هو جوالنا الافتراضي. Swift يكلّم نفس المشروع إذا المنتج حق Apple. اللوحة React في الحالتين. ما في مزامنة. في صف واحد.
قاعدة ثانية للوحة غلط
مصدرين للحقيقة. «العرض نازل؟» تصير وظيفة مزامنة. انحراف. كتابة مرتين. تسوية بالليل ما أحد طلبها. التاجر ينشر؛ المتسوق لازم يشوف هالصف. العيادة تثبّت؛ المريض لازم يشوف هالصف.
إذا بعدين تبي نسخة للتقارير، هذي نسخة. مو قاعدة منتج ثانية. اللوحة وجه ثاني على نفس البيانات. مو منتج ثاني.
المفتاح العام مكانه التطبيق
سنة 2026 Supabase يسمّي المفاتيح publishable وsecret. الأسماء القديمة، anon وservice_role، بعد تشتغل إلى ما تعطّلها. التوثيق يقول بتنوقف نهاية 2026. نستخدم الأسماء الحالية.
Flutter يتجهّز برابط ومفتاح publishableKey. موقفهم الرسمي: هالزوج بيكون في التطبيق، وهذا تمام إذا قوانين الصف شغّالة. ملف الجوال ما عنده .env سحري وقت التشغيل. المفاتيح تدخل وقت البناء. ما تنرفع للمستودع. جملة واحدة تكفي. هذي مو درس تجهيز.
المفتاح السرّي هو service_role القديم باسم جديد. وصول كامل. يعدّي قوانين الصف. مكانه سيرفر تثق فيه أو Edge Function. مو في IPA. مو في AAB. مو في حزمة React. مو في سكرين شوت. مو في لوق. سر يُستخدم في المتصفح يرجع 401. هذا ما يخلّي السر المسرب آمن.
قوانين الصف هي البوابة
تخبّي زر في Flutter أو React مو حماية. اللي معه المفتاح العام يقدر ينادي الـ API. جدول في مخطط مكشوف بدون RLS يُقرأ ويُكتب بهالمفتاح. محرّر الجداول يشغّل RLS افتراضيًا. SQL الخام لا.
Postgres يفحص الصلاحيات أول — هل هالدور يقدر يسوي الفعل — بعدين القوانين — أي صفوف. الجداول الجديدة في public أصلًا تعطي anon وauthenticated وservice_role قراءة وكتابة وتعديل وحذف. تضيف قوانين، الصلاحيات ما تنسحب. تشغّل RLS بدون قوانين، الـ API يرجع صفر صفوف على المفتاح العام. هذا الإغلاق الافتراضي. مو منتج مخلّص.
مفتاح الخدمة ومعه توكن مستخدم يشتغل كالمستخدم، مو كتجاوز. قانون غلط يفشل بهدوء: مفتوح زيادة يرجع صفوف زيادة؛ ضيّق زيادة يرجع ولا شيء وبدون خطأ. التعديل يحتاج قانون قراءة يطابقه. استشهد بالتوثيق، وقف. ما بنكتب كتاب قوانين.
الأدوار في app_metadata أو جدول عضوية
user_metadata المستخدم يعدّله. لا تحط صلاحية هناك. app_metadata لا يعدّله. الأدوار والعلامات اللي ما ينفع يغيّرها تعيش هناك، أو في جدول عضوية.
التوكن مو دائمًا طازج. تغيّر app_metadata والتوكن القديم بعد يحمل الادعاءات القديمة إلى ما يتجدّد. أدوار منتج واحد — متسوق مقابل موظف تاجر — تقدر تعيش في ادعاءات السيرفر. الجهات — عيادات كثير، تجار كثير — تحتاج جدول عضوية ومفتاح جهة. هالفصل في مقالة الجهات. صاحب المنصة ومدير العيادة مو نفس الدخول. تخبّي مسار مو قانون.
صف واحد، ووجهين
T-CODE منتج واحد. التاجر يكتب عرض وفرع. المتسوق يقرأ العرض على الخريطة. تظهر فرع أو تخفيه، تقفل الأكواد، تسترد. نفس الصف. وجهين. سعودي. ما ندّعي ستاك.
Naqrah.app موعد واحد. العيادة ترتّب اليوم. المريض يحجز ويعدّل ويلغي. 100 نقطة = 1 ريال عُماني — منشور. عُمان. نفس الصف. وجهين. نفس القوانين على التوكنين. الوجه عضوية، مو جدول ثاني.
CareerFolio: القانون في البيانات، على الويب
CareerFolio ويب. قول ويب. سنة أداء تخلص تصير أرشيف قراءة فقط. المراجع ياخذ رابط آمن للقراءة. هذي حالة على الصف وقانون، مو زر مطفّى. صفحة الشغل أصلًا تسمّي Supabase وقوانين الصف. دليل إن البوابة في Postgres حتى لو ما في جوال.
التخزين نفس المشروع
صور عروض، وشعارات عيادات، ومرفقات ملفات: نفس المشروع، وقوانين على storage.objects. مزوّد سلال ثاني للوحة نفس غلطة القاعدة الثانية. نذكر، ونوقف. ما بنشرح رفع ملف.
القاعدة أول. بعدين العميلين. الدخول حق العميل عند التسليم. إذا اللوحة بعد «Firebase بعدين»، المنتج ما تحدد. اكتب لنا بالصفوف، مو بالشاشات بس.