يحذف موظف عميلًا من CRM فتختفي بطاقته من القائمة، لكن تقريرًا مخصصًا يظل يعرضه. وقد يظن الفريق أن الحذف الناعم يحمي كل المسارات تلقائيًا. لفهم النتيجة، اكتب أولًا هل الغرض إخفاء السجل من العمل اليومي، أم السماح باستعادته، أم إزالته نهائيًا وفق سياسة المؤسسة.
افصل الحذف الناعم عن الإزالة النهائية
توضح وثائق Eloquent في Laravel 12 أن SoftDeletes يضع وقتًا في deleted_at مع بقاء السجل في الجدول، وتستبعد استعلامات النموذج المحذوف افتراضيًا. وتعيد restore قيمة deleted_at إلى null. المرجع هنا لهذا الإصدار؛ راجع إصدار مشروعك وطريقة استعلامه الفعلية قبل التعميم.
لا تساوِ ذلك بإخفاء آمن لكل نسخة من البيانات. قد يستخدم تقرير SQL مباشرًا أو خدمة بحث أو تصديرًا مستقلًا. وجود الاستبعاد على نموذج Eloquent لا يثبت أن كل طبقات التطبيق تطبق السياسة نفسها.
اختبر القائمة والرابط المباشر والتقرير
أنشئ عميلًا مصطنعًا بمعرف ثابت، وأضف له ملاحظة ومرفقًا تجريبيًا. احذفه بحساب يملك الصلاحية ثم راجع النتائج من حساب موظف عادي. سجل هل ينبغي أن يظهر في البحث والأعداد والتصدير والعلاقات وفق المتطلبات، بدل ترك كل شاشة تتخذ قرارًا مختلفًا.
| المسار | سؤال القبول |
|---|---|
| قائمة العملاء | هل يختفي من النتائج النشطة؟ |
| رابط التفاصيل المباشر | هل يطبق سياسة الوصول المتفق عليها؟ |
| عرض المحذوفات | هل يقتصر على الدور المخول؟ |
| استعادة السجل | هل يعود المعرف والعلاقات الصحيحة؟ |
راجع ما تغير أثناء غيابه
في تجربة افتراضية، تغير مالك الحساب أو نطاق الشركة قبل الاستعادة. تحقق من الصلاحيات الحالية، ولا تجعل القدرة القديمة على الحذف تصريحًا دائمًا للاسترجاع. إذا حدث تعارض مع قاعدة بيانات أو بيانات جديدة، ارفض بوضوح بدل دمج سجلات أو حذف معلومات تلقائيًا.
اعتمد ورقة حالات مع صاحب البيانات
ضمن تصميم CRM اطلب من المراجعة التقنية إثباتًا لكل مسار مهم مع عينة استعادة. لا تختبر forceDelete على بيانات حقيقية، ولا تصف الحذف الناعم بأنه نسخ احتياطي أو تنفيذ كامل لسياسة احتفاظ. النتيجة المطلوبة دورة إخفاء واسترجاع واضحة ومصرح بها.




