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

إنشاء وتسجيل سياسات النماذج Policies في LaravelCreating and Registering Eloquent Model Policies

تنظيم قواعد الصلاحيات الخاصة بكل نموذج داخل كلاسات Policies للتحكم الدقيق في عرض وتعديل وحذف السجلات وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

مع توسع التطبيق، يصبح تكديس عشرات البوابات داخل AppServiceProvider صعب الصيانة؛ وهنا تأتي سياسات النماذج Policies لتجمع كافة قواعد الصلاحيات الخاصة بنموذج معين في كلاس مستقل داخل مجلد app/Policies. نفذ الأمر make:policy مع الخيار --model=Post لتوليد سياسة مجهزة بدوال CRUD القياسية.

  • التوليد المجهز بالنموذج (--model Flag): ينشئ الكلاس متضمناً دوال العرض والإنشاء والتعديل والحذف والاستعادة تلقائياً.
  • مجلد مستقل ومنظم (app/Policies): يعزل منطق الصلاحيات في كلاسات مخصصة يسهل قراءتها واختبارها.
  • سياسة لكل نموذج (Model Alignment): يختص كلاس PostPolicy بنموذج المقالات و OrderPolicy بنموذج الطلبات.
مخطط معماري يوضح إنشاء وتسجيل سياسات النماذج Policies في Laravel في إطار العمل Laravel 12
PHP
# Generate a CRUD Policy for the Post model
php artisan make:policy PostPolicy --model=Post

في معمارية Laravel 11 و 12 الحديثة، لا تحتاج لتسجيل السياسات يدوياً طالما يقع النموذج في مجلد app/Models وتقع السياسة في app/Policies بنفس اسم النموذج متبوعاً بكلمة Policy. أما عند استخدام مسارات غير قياسية، فيمكنك ربطهما صراحة عبر دالة Gate::policy في المزود.

  • اكتشاف تلقائي بدون إعداد (Auto-Discovery): يربط الإطار نموذج Post بكلاس PostPolicy تلقائياً بمجرد تطابق الاسم.
  • التسجيل اليدوي عند الحاجة (Gate::policy): يتيح ربط النموذج بالسياسة برمجياً عند اختلاف التسمية أو المجلد.
  • سمة UsePolicy الحديثة (PHP Attribute): يدعم Laravel 12 وضع سمة UsePolicy مباشرة فوق كلاس النموذج.
PHP
// Automatic: App\Models\Post -> App\Policies\PostPolicy

// Or explicit registration in AppServiceProvider::boot():
Gate::policy(Post::class, PostPolicy::class);

تطابق دوال السياسة أفعال الموارد القياسية؛ حيث تستقبل دوال view و update و delete كائن المستخدم مع كائن السجل المستهدف، بينما تستقبل دالتا viewAny و create كائن المستخدم فقط لعدم وجود سجل معين بعد. داخل دالة التعديل أو الحذف، أعد القيمة المنطقية لملكية السجل.

  • دوال السجل المحدد (update / delete): تستقبل المستخدم والسجل معاً لفحص تطابق الملكية.
  • دوال الإنشاء والقوائم (create / viewAny): تستقبل كائن المستخدم فقط لفحص دوره أو حالة حسابه.
  • دعم ردود التفويض (Response Objects): يمكن لدوال السياسة إرجاع قيم منطقية أو كائنات Response::deny.
PHP
class PostPolicy
{
    public function create(User $user): bool
    {
        return $user->is_verified;
    }
    public function update(User $user, Post $post): bool
    {
        return $user->id === $post->user_id;
    }

يتضمن نموذج User سمة التفويض التي تمنحك دالتي can و cannot مباشرة على كائن المستخدم. مرر نسخة السجل مثل $user->can('update', $post) لفحص صلاحيات التعديل والحذف، أو مرر اسم الكلاس Post::class عند فحص صلاحية إنشاء سجل جديد.

  • فحص سجل قائم ($user->can Instance): يستدعي دالة update في سياسة المقال ويمرر لها السجل.
  • فحص إنشاء جديد (Post::class Target): نمرر اسم الكلاس النصي لعدم وجود كائن مقال منشأ بعد.
  • التكامل مع البوابة (Gate::authorize): تعمل دالة Gate::authorize مع السياسات أيضاً وتطلق 403 عند الرفض.
PHP
if ($request->user()->cannot('create', Post::class)) {
    abort(403);
}

Gate::authorize('update', $post);

يرفض Laravel افتراضياً أي فحص سياسة إذا كان الزائر غير مسجل؛ ولكن إضافة علامة الاستفهام لتلميح النوع ?User تسمح للزوار بالمرور لفحص عرض السجلات المنشورة. كما يمكنك تعريف دالة before داخل كلاس السياسة نفسه لمنح المديرين صلاحية كاملة على ذلك النموذج.

  • معامل المستخدم الاختياري (?User Type-Hint): يسمح بدخول الزوار غير المسجلين لفحص إمكانية قراءة المقالات المنشورة.
  • مرشح السياسة المحلي (Policy before): ينفذ قبل أي دالة أخرى داخل نفس كلاس السياسة.
  • إرجاع null للمتابعة (Fall-Through): إرجاع null من دالة before ينقل الفحص إلى دالة الصلاحية المطلوبة.
PHP
public function before(User $user, string $ability): ?bool
{
    return $user->is_admin ? true : null;
}

public function view(?User $user, Post $post): bool
{
    return $post->is_published || $user?->id === $post->user_i
}

تُمثل سياسات النماذج Policies المعمارية القياسية لتفويض صلاحيات الموارد في Laravel 12. ومن خلال الجمع بين الاكتشاف التلقائي في مجلد app/Policies ودوال $user->can و Gate::authorize، تبقى قواعد الأمان لكل نموذج معزولة وقابلة للاختبار بسهولة.

وجه المقارنة الهندسيالأسلوب اليدوي أو غير المحسنمعيار Laravel 12 الحديث
تنظيم قواعد النماذجتكديس عشرات الدوال المغلقة داخل AppServiceProviderإنشاء كلاس سياسة مستقل لكل نموذج في مجلد app/Policies
تسجيل السياساتربط كل نموذج بسياسته يدوياً في مصفوفات الإعداداتالاعتماد على الاكتشاف التلقائي القياسي في Laravel 12
فحص صلاحية الإنشاءإنشاء كائن نموذج فارغ ومؤقت لتمريره لدالة الفحصتمرير اسم الكلاس Post::class مباشرة لدالة can أو authorize
عرض العام والمسوداتتكرار دوال العرض في المتحكم للزوار والأعضاءاستخدام المعامل الاختياري ?User داخل دالة view في السياسة
PHP
// In PostController:
public function destroy(Post $post)
{
    Gate::authorize('delete', $post);
    $post->delete();
    return to_route('posts.index');
}
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

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

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

أتقنت في هذا الدرس حول «إنشاء وتسجيل سياسات النماذج Policies في Laravel» مفاهيم توليد كلاسات سياسات النماذج Policy، والاكتشاف التلقائي لسياسات النماذج، وكتابة دوال صلاحيات الموارد CRUD وفق معايير Laravel 12 الحديثة.

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

انتقل الآن إلى الدرس التالي «تطبيق الصلاحيات بتوجيهات Can وتحصين أمان تطبيقات Laravel» للبناء التراكمي على ما تعلمته.

مشاركة

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

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

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

المصطلحات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Model Policies سياسات النماذج
تنظيم قواعد الصلاحيات الخاصة بكل نموذج داخل كلاسات Policies للتحكم الدقيق في عرض وتعديل وحذف السجلات وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
للمراجعة
02 Generating Model Policy Classes توليد كلاسات سياسات النماذج Policy
المفهوم الهندسي والتطبيق العملي المباشر لقسم توليد كلاسات سياسات النماذج Policy في إطار العمل Laravel 12.
للمراجعة
03 Policy Auto Discovery Conventions الاكتشاف التلقائي لسياسات النماذج
المفهوم الهندسي والتطبيق العملي المباشر لقسم الاكتشاف التلقائي لسياسات النماذج في إطار العمل Laravel 12.
للمراجعة
04 Writing CRUD Policy Action Methods كتابة دوال صلاحيات الموارد CRUD
المفهوم الهندسي والتطبيق العملي المباشر لقسم كتابة دوال صلاحيات الموارد CRUD في إطار العمل 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. اكتب ونفّذ المثال البرمجي المشروح في قسم «توليد كلاسات سياسات النماذج Policy» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

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

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

مساحة التحدي

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

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

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

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

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

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

ما الهدف الهندسي الأساسي من توليد كلاسات سياسات النماذج Policy في إطار العمل Laravel 12؟

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

02

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

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

03

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

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

04

لماذا يُعد تطبيق فحص السياسات عبر كائن المستخدم مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

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

05

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

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

06

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

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

07

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

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

08

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

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