شرح صفوف ومحتوى الفقرة
عندما تحتاج لتوضيح سبب رفض الإجراء للمستخدم، أعد كائناً من واجهة Response داخل البوابة باستخدام Response::allow أو Response::deny مع رسالة مخصصة. كما يمكنك تسجيل خطاف Gate::before لمنح المدير العام صلاحية شاملة قبل فحص البوابات الفردية.
- رسالة رفض مخصصة (Response::deny): تمرر رسالة توضيحية دقيقة تظهر في صفحة الخطأ أو عبر دالة inspect.
- إخفاء السجل بـ 404 (denyWithStatus): تتيح إرجاع 404 بدلاً من 403 لإخفاء وجود السجلات الخاصة تماماً.
- تجاوز المدير العام (Gate::before): ينفذ قبل كل البوابات؛ فإذا أعاد true يمنح الصلاحية فوراً وإذا أعاد null يكمل الفحص.
PHP
use Illuminate\Auth\Access\Response;
Gate::before(fn (User $u) => $u->is_admin ? true : null);
Gate::define('edit-post', function (User $u, Post $p): Respons
return $u->id === $p->user_id
? Response::allow()
: Response::deny('Only the author may edit this post.'
});