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

تطبيق الصلاحيات بتوجيهات Can وتحصين أمان تطبيقات LaravelAuthorizing Actions with Can Directives and Security Hardening

فحص الصلاحيات في المسارات والمتحكمات وقوالب Blade عبر @can و @cannot وتطبيق قواعد التحصين الأمني الشامل في Laravel.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

يمكنك فرض سياسات النماذج إما في مطلع دالة المتحكم عبر Gate::authorize أو مباشرة داخل دالة authorize في كلاس طلب التحقق FormRequest. يضمن فحص الصلاحية داخل FormRequest رفض الطلبات غير المصرحة برمز 403 مبكراً قبل البدء بفحص قواعد التحقق من المدخلات.

  • الإلزام داخل المتحكم (Gate::authorize): فحص صريح وواضح في أول سطر من دالة المتحكم.
  • الإلزام في طلب التحقق (FormRequest::authorize): يجمع فحص الصلاحية والتحقق من الحقول في كلاس واحد.
  • جلب نموذج المسار ($this->route): يصل إلى كائن النموذج المحقون بالمسار لفحص ملكيته داخل الطلب.
مخطط معماري يوضح تطبيق الصلاحيات بتوجيهات Can وتحصين أمان تطبيقات Laravel في إطار العمل Laravel 12
PHP
// Inside UpdatePostRequest extends FormRequest:
public function authorize(): bool
{
    $post = $this->route('post');
    return $this->user()->can('update', $post);
}

يتيح لك Laravel أيضاً فرض الصلاحيات مباشرة في تعريف المسار باستخدام البرمجية الوسيطة can أو الدالة السلسة ->can على المسار. عند كتابة ->can('update', 'post')، يلتقط الإطار تلقائياً كائن النموذج المرتبط بالمعامل {post} ويمرره إلى دالة update في السياسة قبل تشغيل المتحكم.

  • ربط معامل المسار (->can('update', 'post')): يمرر كائن المقال المرتبط بالمعامل {post} في الرابط إلى السياسة.
  • ربط كلاس النموذج (->can('create', Post::class)): يمرر اسم الكلاس في مسارات الإنشاء التي لا تحتوي معامل سجل.
  • صيغة الوسيط النصية (can:update,post): تكافئ تماماً استخدام الدالة السلسة can على المسار.
PHP
Route::put('/posts/{post}', [PostController::class, 'update'])
    ->can('update', 'post');

Route::post('/posts', [PostController::class, 'store'])
    ->can('create', Post::class);

لتقديم واجهة مستخدم نظيفة لا تظهر فيها أزرار التعديل والحذف إلا لمن يملك صلاحية تنفيذها فعلياً، استخدم توجيهات @can و @cannot و @canany داخل قوالب Blade. وكما هو الحال في المتحكمات، مرر كائن السجل لفحص التعديل أو اسم الكلاس لفحص زر الإضافة.

  • إظهار المشروط بالصلاحية (@can): يعرض زر التعديل فقط إذا سمحت سياسة النموذج للمستخدم الحالي.
  • العرض عند عدم الصلاحية (@cannot): يعرض تنويهاً أو نصاً للقراءة فقط لمن لا يملكون صلاحية التعديل.
  • توفر أي صلاحية (@canany): يعرض قائمة الإجراءات إذا كان المستخدم يملك واحدة على الأقل من الصلاحيات المذكورة.
PHP
@can('create', App\Models\Post::class)
    <a href="{{ route('posts.create') }}">New Post</a>
@endcan

@can('update', $post)
    <a href="{{ route('posts.edit', $post) }}">Edit</a>
@endcan

تُعد ثغرات الوصول المباشر غير الآمن للكائنات IDOR والإسناد الجماعي Mass Assignment من أشهر ثغرات تطبيقات الويب. في Laravel 12، تقضي على ثغرة IDOR بفرض فحص Policy أو تقييد الاستعلام بالعلاقة في كل مسار، وتقضي على الإسناد الجماعي بتمرير البيانات المتحقق منها فقط عبر $request->validated مع تحديد مصفوفة $fillable.

  • منع IDOR بالسياسات (Policy Enforcement): افحص دائماً ملكية السجل عبر Gate::authorize قبل أي تعديل أو حذف.
  • تقييد الاستعلام بالملكية (Scoped Relation): استعلم من خلال علاقة المستخدم الحالي مثل $request->user->posts.
  • تمرير المدخلات الموثقة فقط (validated Only): لا تمرر أبداً $request->all لدوال الحفظ، بل استخدم $request->validated حصرياً.
PHP
public function update(UpdatePostRequest $request, Post $post)
{
    Gate::authorize('update', $post);

    $post->update($request->validated());
    return back();}

يأتي إطار Laravel مزوداً بطبقات حماية مدمجة قوية ضد أشهر ثغرات الويب العالمية OWASP شريطة الالتزام بالقواعد القياسية للإطار. اطبع المتغيرات دائماً بعلامة الهروب {{ }}، وأدرج @csrf في النماذج، واستخدم ربط المعاملات في الاستعلامات، وفعل محدد السرعة throttle، واضبط APP_DEBUG=false في الإنتاج.

  • الحماية من XSS و CSRF (Escaping & Tokens): التزم بالطباعة المحمية {{ }} في القوالب وتوجيه @csrf في جميع النماذج.
  • الحماية من حقن SQL (Parameter Binding): اعتمد على Eloquent و Query Builder ولا تدمج مدخلات المستخدم النصية في SQL خام.
  • أمان بيئة الإنتاج (APP_DEBUG=false): أغلق وضع التصحيح في الخادم الحي لمنع ظهور مسارات الملفات ومفاتيح البيئة.
PHP
// Safe parameterized query (immune to SQLi):
$users = User::where('email', $request->input('email'))->get()

// Safe XSS-escaped Blade output:
<p>{{ $user->bio }}</p>

يعمل الأمان في Laravel 12 عبر طبقات متتالية؛ حيث تحرس الوسائط ومحددات السرعة محيط المسارات، وتفرض السياسات والبوابات ملكية السجلات، وتدقق طلبات التحقق كل حقل مدخل، وتحمي توجيهات Blade طبقة العرض. في الوحدة التالية، سنطبق هذه الأسس لبناء واجهات RESTful APIs وتأمينها عبر Laravel Sanctum.

وجه المقارنة الهندسيالأسلوب اليدوي أو غير المحسنمعيار Laravel 12 الحديث
الاعتماد على الواجهة فقطإخفاء زر الحذف بـ @can مع ترك مسار الحذف في الخادم بدون فحصالجمع بين @can في العرض و ->can('delete', 'post') على المسار
تحديث بيانات النموذجتمرير $request->all مباشرة والمخاطرة بتعديل حقول حساسةتمرير $request->validated حصرياً مع تحديد مصفوفة $fillable
طباعة نصوص المستخدماستخدام الطباعة غير المحمية {!! !!} لنصوص التعليقات العامةالالتزام بالطباعة المحمية {{ }} لمنع ثغرات XSS تلقائياً
تصفية استعلامات القاعدةدمج متغيرات المستخدم نصياً داخل استعلامات SQL الخاماستخدام دوال where القياسية المعتمدة على ربط المعاملات الآمن
PHP
Route::delete('/posts/{post}', [PostController::class, 'destro
    ->middleware('auth')
    ->can('delete', 'post');
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس حول «تطبيق الصلاحيات بتوجيهات Can وتحصين أمان تطبيقات Laravel» مفاهيم تفويض الصلاحيات بالمتحكم وطلب التحقق، وتفويض المسارات عبر وسيط Can، وتوجيهات الصلاحيات Can في Blade وفق معايير Laravel 12 الحديثة.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس التالي «بناء مسارات RESTful API ومتحكمات JSON في Laravel» للبناء التراكمي على ما تعلمته.

مشاركة

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

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

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

المصطلحات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Can Directives توجيهات الصلاحيات
فحص الصلاحيات في المسارات والمتحكمات وقوالب Blade عبر @can و @cannot وتطبيق قواعد التحصين الأمني الشامل في Laravel.
للمراجعة
02 Authorizing Controllers and Requests تفويض الصلاحيات بالمتحكم وطلب التحقق
المفهوم الهندسي والتطبيق العملي المباشر لقسم تفويض الصلاحيات بالمتحكم وطلب التحقق في إطار العمل Laravel 12.
للمراجعة
03 Route Level Authorization Middleware تفويض المسارات عبر وسيط Can
المفهوم الهندسي والتطبيق العملي المباشر لقسم تفويض المسارات عبر وسيط Can في إطار العمل Laravel 12.
للمراجعة
04 Blade Can and Cannot Directives توجيهات الصلاحيات Can في Blade
المفهوم الهندسي والتطبيق العملي المباشر لقسم توجيهات الصلاحيات Can في Blade في إطار العمل 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. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «تفويض المسارات عبر وسيط Can» وقارن مخرجات التنفيذ.

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

مساحة التحدي

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

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

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

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

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

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

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

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

02

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

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

03

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

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة توجيهات الصلاحيات Can في Blade.

04

لماذا يُعد تطبيق منع ثغرات IDOR والإسناد الجماعي مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

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

05

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

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

06

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

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

07

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

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

08

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

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