Add protected training content admin

This commit is contained in:
Hamza-Ayed
2026-10-04 01:59:41 +03:00
parent 66efcdac6a
commit d892e3d981
6 changed files with 773 additions and 1 deletions
+3 -1
View File
@@ -74,7 +74,9 @@ Git: مصدر الإصدار → SSH:2101 → نسخة إصدار → تبديل
يفضل نطاق واحد ببنية `/` للموقع و`/api/v1/` للواجهات و`/admin/` للإدارة. ملفات رفع الصور خارج `public/` ولا يمكن طلبها بعنوان مباشر؛ الوصول عبر endpoint يتحقق من ملكية المستخدم. واجهة PHP العامة تبدأ من مجلد `public`، بينما إعدادات الخادم والمكتبات والنسخ والملفات الخاصة تبقى فوق document root.
ملفات PHP الداخلية باقية داخل `backend/` خارج document root، وأضفنا `public/` كنقطة عرض للموقع وواجهات JSON أولية. يتضمن الموقع صفحة عربية RTL متجاوبة، ويقدم `/api/v1/health.php` فحصًا لا يكشف تفاصيل الاتصال، و`/api/v1/config.php` الإعدادات العامة فقط، و`/api/v1/plans.php` الخطط المنشورة وتمارينها ووسائط GIF والبدائل. أضيفت جداول مكتبة التمارين والخطط والجلسات ومهاجرة `003_training_content.sql`. فشل قاعدة البيانات يعاد كـ503 دون تسريب تفاصيلها. هذه واجهات تأسيسية؛ لا توجد بعد مصادقة مستخدم أو لوحة إدارة ولا ينبغي نشرها كمنتج مكتمل. لا نضع `backend/schema.sql` وحده كترحيل تلقائي على قاعدة إنتاج.
ملفات PHP الداخلية باقية داخل `backend/` خارج document root، وأضفنا `public/` كنقطة عرض للموقع وواجهات JSON أولية. يتضمن الموقع صفحة عربية RTL متجاوبة، ويقدم `/api/v1/health.php` فحصًا لا يكشف تفاصيل الاتصال، و`/api/v1/config.php` الإعدادات العامة فقط، و`/api/v1/plans.php` الخطط المنشورة وتمارينها ووسائط GIF والبدائل. أضيفت جداول مكتبة التمارين والخطط والجلسات ومهاجرة `003_training_content.sql`. فشل قاعدة البيانات يعاد كـ503 دون تسريب تفاصيلها. واجهات المحتوى والإدارة أولية وتحتاج staging ومراجعة أمنية قبل الإنتاج. لا نضع `backend/schema.sql` وحده كترحيل تلقائي على قاعدة إنتاج.
أضيفت الآن صفحة `/admin/` عربية لإدارة الحركات والخطط، ودخول OTP للحساب الموجود مسبقًا. لا تسمح الواجهة بالمستخدم العادي؛ يتحقق الخادم من دور `owner` أو `content_manager` لكل طلب. واجهة `/api/v1/admin/content.php` تقرأ وتكتب التمارين والخطط والجلسات وبيانات الوسائط، وتقيّد روابط GIF إلى HTTPS، وتتحقق من القيم والحدود، كما تمنع سحب نشر تمرين مرتبط بخطة منشورة. تسجل تغييرات المحتوى في `training_content_audit` عبر migration `004_content_audit.sql`. هذه لوحة تحرير أولية: جدول جلسات الخطة يحرر حاليًا كـJSON، ولا تتضمن بعد محرر رفع ملفات أو مراجعة مصادر مدمجة. يجب تطبيق migrations بالترتيب `001` إلى `004` على staging بعد النسخ الاحتياطي، وإنشاء حساب مالك بدور صحيح خارج الواجهة؛ لم تُطبق بعد على قاعدة حية.
قاعدة البيانات في CloudPanel تنشأ باسم ومستخدم مخصصين من واجهة الإدارة، بصلاحيات قاعدة التطبيق فقط، واتصال محلي إن كانت PHP وMySQL على المضيف نفسه. تحفظ نسخة احتياطية دورية وتختبر استعادتها. اسم قاعدة البيانات والمستخدم وكلمة المرور الفعلية تأتي من بيئة الخادم؛ لا تضاف إلى Flutter أو Git.