Skip to content

الإعدادات

يوفر FORGE نظام إعدادات تطبيق مدعوم بقاعدة البيانات مع دعم القيم المُنمّطة والتجميع والتشفير للبيانات الحساسة ونموذج ظهور عام/خاص. تُدار الإعدادات من خلال لوحة الإدارة وتُستهلك من الخلفية والواجهة الأمامية.

نظرة عامة

بدلاً من الاعتماد فقط على متغيرات البيئة أو ملفات الإعدادات، يخزن FORGE إعدادات التطبيق في قاعدة البيانات. هذا يُمكّن المسؤولين من تعديل سلوك التطبيق أثناء التشغيل من خلال واجهة الإدارة بدون إعادة النشر.

مخطط قاعدة البيانات

يخزن جدول settings جميع قيم الإعدادات:

العمودالنوعالوصف
idUUIDالمفتاح الأساسي
group_nameVARCHAR(100)فئة الإعداد (مثل general، auth، email)
keyVARCHAR(100)معرّف الإعداد (فريد ضمن المجموعة)
valueTEXTالقيمة المُخزّنة (قد تكون مُشفّرة)
typeVARCHAR(20)نوع القيمة: string، boolean، number، json، encrypted
is_publicBOOLEANما إذا كان الإعداد يُكشف للـ API العام
is_sensitiveBOOLEANما إذا كانت القيمة يجب إخفاؤها في واجهة الإدارة
created_atTIMESTAMPطابع زمني لإنشاء السجل
updated_atTIMESTAMPطابع زمني لآخر تحديث

مجموعات الإعدادات

الإعدادات مُنظّمة في مجموعات منطقية:

عام

المفتاحالنوعالافتراضيعامالوصف
app_namestring"FORGE App"نعماسم عرض التطبيق
app_urlstring--نعمالرابط الأساسي للتطبيق
timezonestring"UTC"نعمالمنطقة الزمنية الافتراضية
date_formatstring"YYYY-MM-DD"نعمتنسيق عرض التاريخ

المصادقة

المفتاحالنوعالافتراضيعامالوصف
allow_registrationbooleantrueنعمما إذا كان يمكن للمستخدمين الجدد التسجيل
session_lifetimenumber1440لامدة الجلسة بالدقائق
password_min_lengthnumber8نعمالحد الأدنى لطول كلمة المرور
require_email_verifybooleantrueلاطلب التحقق من البريد الإلكتروني

البريد الإلكتروني

المفتاحالنوعالافتراضيعامحساسالوصف
email_driverstring"smtp"لالامزود البريد الإلكتروني
email_hoststring--لالاعنوان خادم SMTP
email_portnumber587لالامنفذ SMTP
email_usernamestring--لالااسم مستخدم SMTP
email_passwordencrypted--لانعمكلمة مرور SMTP
email_encryptionstring"tls"لالاطريقة التشفير
email_from_namestring--لالااسم عرض المُرسل
email_from_addressstring--لالاعنوان بريد المُرسل

التخزين

المفتاحالنوعالافتراضيعامالوصف
storage_driverstring"local"لاواجهة التخزين
max_upload_sizenumber10نعمحد حجم الرفع بالميجابايت
allowed_typesjson--نعمأنواع MIME المسموحة للرفع

التشفير

الإعدادات ذات type = "encrypted" تُشفّر في التخزين باستخدام AES-256-GCM. يُوفّر مفتاح التشفير عبر متغير البيئة FORGE_ENCRYPTION_KEY.

┌─────────────────────────────────────────────────────┐
│                 مسار التشفير                         │
├─────────────────────────────────────────────────────┤
│                                                      │
│  قيمة نصية ──► تشفير AES-256-GCM ──► مُخزّنة        │
│                       │                              │
│              FORGE_ENCRYPTION_KEY                     │
│              (من البيئة)                              │
│                                                      │
│  قيمة مُخزّنة ──► فك تشفير AES-256-GCM ──► نصية     │
│                       │                              │
│              FORGE_ENCRYPTION_KEY                     │
│                                                      │
└─────────────────────────────────────────────────────┘

تحذير

يجب تعيين FORGE_ENCRYPTION_KEY في بيئتك قبل بدء التطبيق. إذا فُقد المفتاح، تصبح جميع الإعدادات المُشفّرة غير قابلة للاسترداد. احتفظ بنسخة احتياطية من هذا المفتاح بشكل آمن ولا تُدخله أبداً في التحكم بالإصدارات.

نصيحة

فقط الإعدادات التي تحتوي بيانات اعتماد أو أسرار يجب أن تستخدم نوع encrypted. الأمثلة الشائعة تشمل كلمات مرور SMTP ومفاتيح API السرية ورموز مزودي الدفع.

واجهة الإدارة

تُنظّم صفحة إعدادات الإدارة الإعدادات حسب المجموعة مع عناصر تحكم إدخال مناسبة:

  • String -- حقل إدخال نصي
  • Boolean -- مفتاح تبديل
  • Number -- إدخال رقمي مع تحقق
  • JSON -- محرر كود مع تمييز بناء الجملة
  • Encrypted -- حقل إدخال كلمة مرور (القيمة تُخفى بعد الحفظ)

الإعدادات الحساسة (حيث is_sensitive = true) تعرض قيمها كنقاط مُقنّعة في واجهة الإدارة. القيمة الفعلية تُكشف فقط عندما ينقر المسؤول صراحة للإظهار.

تحذير

الإعدادات المُشفّرة تُعرض كـ •••••••• في لوحة الإدارة. عند التحرير، يظهر الحقل فارغاً. إرسال قيمة فارغة لحقل مُشفّر يحافظ على القيمة الموجودة -- لا يمسحها.

API العام

نقطة نهاية الإعدادات العامة تُرجع فقط الإعدادات حيث is_public = true:

bash
GET /api/settings

مثال على الاستجابة

json
{
  "general": {
    "app_name": "تطبيقي",
    "app_url": "https://example.com",
    "timezone": "UTC"
  },
  "auth": {
    "allow_registration": true,
    "password_min_length": 8
  },
  "storage": {
    "max_upload_size": 10,
    "allowed_types": ["image/jpeg", "image/png", "application/pdf"]
  }
}

نصيحة

الإعدادات الخاصة (بيانات اعتماد قاعدة البيانات، مفاتيح API، الإعدادات الداخلية) لا تُكشف أبداً من خلال API العام، بغض النظر عن دور المستخدم الطالب.

الاستخدام في الخلفية

rust
// Get a typed setting value
let app_name: String = settings_service.get("general", "app_name").await?;
let session_lifetime: i64 = settings_service.get("auth", "session_lifetime").await?;
let allow_reg: bool = settings_service.get("auth", "allow_registration").await?;

// Get an encrypted setting (automatically decrypted)
let smtp_password: String = settings_service.get("email", "email_password").await?;

// Update a setting
settings_service.set("general", "app_name", "New App Name").await?;

Released under the MIT License.