انتقل إلى محتوى الدرس
الدرس 46
دورة إطار العمل Laravel

تفويض الصلاحيات وبوابات التحكم بالوصول Gates في LaravelAuthorization Gates and Access Control in Laravel

التمييز الدقيق بين المصادقة والتفويض وتعريف بوابات الصلاحيات البرمجية عبر Gate::define وفحصها بـ allows و authorize.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

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

  • المصادقة (Authentication 401): تجيب عن سؤال من أنت عبر الحراس والجلسات وفحص كلمة المرور.
  • التفويض (Authorization 403): يجيب عن سؤال هل تملك صلاحية تنفيذ هذا الإجراء عبر البوابات والسياسات.
  • منع التلاعب بالمعرفات (IDOR Defense): يمنع مستخدماً من تعديل مقال مستخدم آخر بمجرد تغيير رقم المعرف في الرابط.
مخطط معماري يوضح تفويض الصلاحيات وبوابات التحكم بالوصول Gates في Laravel في إطار العمل Laravel 12
PHP
// Authentication: Is the visitor logged in?
$user = $request->user();

// Authorization: Does this user own the post?
$isOwner = $user->id === $post->user_id;

بوابات الصلاحيات Gates هي قواعد تفويض تعتمد على الدوال المغلقة ويتم تعريفها عبر دالة Gate::define داخل دالة boot في المزود AppServiceProvider. تستقبل دالة البوابة دائماً كائن المستخدم المسجل حالياً كمعامل أول، متبوعاً بأي كائن نموذج إضافي مطلوب لاتخاذ قرار السماح أو المنع.

  • تعريف البوابة (Gate::define): تسجل قاعدة صلاحية مسماة داخل دالة boot في ملف AppServiceProvider.
  • حقن المستخدم تلقائياً (Auto User Arg): يمرر Laravel كائن المستخدم الحالي كأول معامل للدالة المغلقة.
  • القرار المنطقي (Boolean Return): أعد القيمة true لمنح الصلاحية أو false لرفض تنفيذ الإجراء.
PHP
use App\Models\Post;
use App\Models\User;
use Illuminate\Support\Facades\Gate;

Gate::define('update-post', function (User $user, Post $post):
    return $user->id === $post->user_id;
});

لفحص بوابة صلاحية بشكل شرطي داخل دالة المتحكم، استدعِ دالة Gate::allows أو Gate::denies ومرر اسم الصلاحية مع النموذج المستهدف. لا تحتاج لتمرير كائن المستخدم الحالي يدوياً؛ إذ يتولى Laravel جلبه وحقنه في البوابة تلقائياً.

  • فحص السماح (Gate::allows): تعيد القيمة true إذا كان المستخدم الحالي يمتلك الصلاحية المطلوبة.
  • فحص المنع (Gate::denies): تعيد القيمة true إذا كان المستخدم الحالي ممنوعاً من تنفيذ الإجراء.
  • الفحص لمستخدم آخر (Gate::forUser): تتيح فحص الصلاحية لحساب مستخدم معين غير المستخدم النشط في الجلسة.
PHP
if (Gate::denies('update-post', $post)) {
    abort(403, 'You do not own this post.');
}

$post->update($request->validated());

بدلاً من كتابة جملة شرطية بـ Gate::denies واستدعاء abort(403) يدوياً في كل دالة متحكم، استدعِ دالة Gate::authorize في سطر واحد نظيف. عند رفض الصلاحية، تطلق هذه الدالة استثناء AuthorizationException الذي يحوله Laravel تلقائياً إلى استجابة 403 قياسية.

  • حارس بسطر واحد (One-Line Guard): يغني عن تكرار الجمل الشرطية ودالة الإيقاف اليدوية في كل إجراء.
  • إطلاق الاستثناء تلقائياً (Auto 403): يوقف تنفيذ الدالة فوراً ويعرض صفحة 403 أو استجابة JSON مقابلة.
  • نظافة كود المتحكم (Clean Action): لا يتم تنفيذ الأسطر التالية لدالة authorize إلا بعد ثبوت الصلاحية.
PHP
public function update(Request $request, Post $post)
{
    Gate::authorize('update-post', $post);

    $post->update($request->validated());
    return redirect()->route('posts.show', $post);
}

عندما تحتاج لتوضيح سبب رفض الإجراء للمستخدم، أعد كائناً من واجهة 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.'
});

توفر بوابات الصلاحيات 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» للبناء التراكمي على ما تعلمته.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Access Gates بوابات الصلاحيات
التمييز الدقيق بين المصادقة والتفويض وتعريف بوابات الصلاحيات البرمجية عبر Gate::define وفحصها بـ allows و authorize.
للمراجعة
02 Authentication Versus Authorization الفرق بين المصادقة وتفويض الصلاحيات
المفهوم الهندسي والتطبيق العملي المباشر لقسم الفرق بين المصادقة وتفويض الصلاحيات في إطار العمل Laravel 12.
للمراجعة
03 Defining Closure Authorization Gates تعريف بوابات الصلاحيات Gate Define
المفهوم الهندسي والتطبيق العملي المباشر لقسم تعريف بوابات الصلاحيات Gate Define في إطار العمل Laravel 12.
للمراجعة
04 Checking Gates With Allows Denies فحص البوابات بدالة Gate Allows
المفهوم الهندسي والتطبيق العملي المباشر لقسم فحص البوابات بدالة Gate Allows في إطار العمل Laravel 12.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 MVC MVC
Model View Controller
النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
للمراجعة
02 CLI CLI
Command Line Interface
واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
للمراجعة
03 HTTP HTTP
Hypertext Transfer Protocol
بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
للمراجعة
04 PSR PSR
PHP Standards Recommendations
المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب ونفّذ المثال البرمجي المشروح في قسم «الفرق بين المصادقة وتفويض الصلاحيات» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «تعريف بوابات الصلاحيات Gate Define» وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الهدف الهندسي الأساسي من الفرق بين المصادقة وتفويض الصلاحيات في إطار العمل Laravel 12؟

يسهم الفرق بين المصادقة وتفويض الصلاحيات في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.

02

يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «تعريف بوابات الصلاحيات Gate Define» على رفع جودة الكود وسهولة اختباره آلياً.

صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.

03

أي آلية في Laravel 12 تتولى إدارة فحص البوابات بدالة Gate Allows بشكل مباشر ومنظم؟

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة فحص البوابات بدالة Gate Allows.

04

لماذا يُعد تطبيق إلزام الصلاحية عبر Gate Authorize مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.

05

في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.

خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.

06

ما المزايا الهندسية التي يحققها تطبيق ردود البوابة المخصصة وصلاحية المدير في Laravel 12؟ (اختر كل ما ينطبق)

يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.

07

يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.

صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.

08

ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص بوابات التحكم بالوصول Gates؟

يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.