شرح صفوف ومحتوى الفقرة
توفر بوابات الصلاحيات Gates آلية سريعة ومعبرة لتوحيد قواعد التحكم بالوصول داخل AppServiceProvider. اعتمد على Gate::define لتعريف القواعد، و Gate::authorize لفرضها بصرامة في المتحكمات، و Gate::before لتجاوز الفحوصات للمدير العام.
| وجه المقارنة الهندسي | الأسلوب اليدوي أو غير المحسن | معيار Laravel 12 الحديث |
|---|---|---|
| فحص ملكية السجل | تكرار شرط مقارنة user_id يدوياً داخل عشرات الدوال | تعريف بوابة مركزية قابلة لإعادة الاستخدام عبر Gate::define |
| إيقاف الطلب المرفوض | كتابة جملة شرطية مع abort(403) يدوياً في كل مرة | استدعاء Gate::authorize('update-post', $post) بسطر واحد |
| صلاحية المدير العام | إضافة شرط || $user->is_admin داخل كل بوابة على حدة | تسجيل خطاف Gate::before موحد في AppServiceProvider |
| توضيح سبب الرفض | إرجاع false فقط دون توضيح سبب المنع للمستخدم | استخدام Response::deny مع رسالة واضحة أو denyAsNotFound |
PHP
// Define in AppServiceProvider::boot()
Gate::define('publish-post', fn (User $u) => $u->role === 'edi
// Enforce in Controller:
Gate::authorize('publish-post');
خلاصة المعرفة ومحطة الانتقال
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس حول «تفويض الصلاحيات وبوابات التحكم بالوصول Gates في Laravel» مفاهيم الفرق بين المصادقة وتفويض الصلاحيات، وتعريف بوابات الصلاحيات Gate Define، وفحص البوابات بدالة Gate Allows وفق معايير Laravel 12 الحديثة.
الخطوة التالية والدرس القادم
انتقل الآن إلى الدرس التالي «إنشاء وتسجيل سياسات النماذج Policies في Laravel» للبناء التراكمي على ما تعلمته.