عند تطوير أي تطبيق باستخدام Laravel، ستصل بسرعة إلى نقطة تحتاج فيها للتحكم في الصلاحيات: من يمكنه مشاهدة صفحة معينة؟ من يستطيع تعديل أو حذف بيانات؟ ومن يملك صلاحيات الإدارة؟
هنا يظهر نظام Authorization داخل Laravel، والذي يعتمد بشكل أساسي على أداتين قويتين:
- Gate
- Policy
في هذه المقالة سنفهم بشكل عملي وعميق ما هو Gate وما هو Policy، وما الفرق بينهما، وكيف تستخدمهما لبناء نظام صلاحيات احترافي يقلل الفوضى ويجعل الكود نظيفًا وقابلًا للتوسع.
ما هو Authorization ولماذا هو مهم؟
Authorization يعني: تحديد ما يمكن للمستخدم فعله داخل التطبيق.
الفرق بين Authentication و Authorization
| العنصر | Authentication | Authorization |
|---|---|---|
| المعنى | من أنت؟ | ماذا يمكنك أن تفعل؟ |
| الهدف | التحقق من الهوية | التحكم في الصلاحيات |
| مثال | تسجيل الدخول | هل يمكن حذف منشور؟ |
بدون Authorization، أي مستخدم يمكنه تنفيذ أي عملية، وهذا خطر كبير جدًا.
ما هو Gate؟
Gate هو أبسط وسيلة يقدمها Laravel للتحقق من الصلاحيات.
فكرة Gate
Gate عبارة عن “شرط” بسيط يتم تعريفه داخل التطبيق.
مثال:
- هل المستخدم Admin؟
- هل يمكنه حذف عنصر؟
متى تستخدم Gate؟
- عندما تكون الصلاحيات بسيطة
- عندما لا تحتاج ربط الصلاحية بـ Model معين
- عند التحقق السريع داخل Controller أو View
مثال عملي على Gate
تخيل أنك تريد التحقق:
“هل المستخدم Admin؟”
بدل كتابة شرط في كل مكان، تقوم بتعريف Gate مرة واحدة، ثم تستخدمه في أي مكان داخل التطبيق.
ما هو Policy؟
Policy هو نظام أكثر احترافية وتنظيمًا لإدارة الصلاحيات، خاصة عندما تكون مرتبطة ببيانات معينة (Models).
فكرة Policy
Policy يربط الصلاحيات بـ Model معين.
مثال
لو لديك Model باسم:
Post
يمكنك داخل Policy تحديد:
- من يمكنه عرض Post
- من يمكنه تعديل Post
- من يمكنه حذف Post
متى تستخدم Policy؟
- عند التعامل مع Models
- عند وجود أكثر من عملية (View / Update / Delete)
- في المشاريع المتوسطة والكبيرة
الفرق بين Gate و Policy
| العنصر | Gate | Policy |
|---|---|---|
| التعقيد | بسيط | متوسط إلى متقدم |
| التنظيم | أقل | عالي |
| الاستخدام | شروط سريعة | نظام صلاحيات متكامل |
| مناسب لـ | مشاريع صغيرة | مشاريع كبيرة |
كيف يعمل نظام الصلاحيات في Laravel؟
User→Gate/Policy→Allow or DenyUser \rightarrow Gate/Policy \rightarrow Allow \; or \; Deny
كيف يفكر Laravel في Authorization؟
Laravel يعتمد على مبدأ:
“لا تسمح بأي عملية إلا بعد التحقق من الصلاحيات”
مثال عملي شامل
لنفترض أنك تبني نظام Blog:
أنواع المستخدمين
- User عادي
- Author
- Admin
العمليات
- قراءة المقال
- إنشاء مقال
- تعديل مقال
- حذف مقال
بدون Gate وPolicy
ستكتب شروط مثل:
- if user is admin
- if user owns post
في كل Controller → كود مكرر وفوضوي.
باستخدام Gate
يمكنك التحقق من أشياء بسيطة مثل:
- هل المستخدم Admin؟
باستخدام Policy
يمكنك كتابة قواعد واضحة مثل:
- المستخدم يمكنه تعديل المقال إذا كان هو صاحبه
- Admin يمكنه حذف أي مقال
لماذا Gate وPolicy مهمان جدًا؟
1. تقليل تكرار الكود
بدل كتابة نفس الشروط في كل مكان.
2. تنظيم الصلاحيات
كل الصلاحيات في مكان واحد.
3. تحسين الأمان
منع الوصول غير المصرح.
4. سهولة التعديل
يمكنك تغيير الصلاحيات بسهولة بدون لمس Controllers.
5. دعم التوسع
إضافة Roles جديدة بدون كسر النظام.
أين يتم استخدام Gate وPolicy؟
داخل Controllers
للتحقق قبل تنفيذ العمليات.
داخل Middleware
لحماية Routes.
داخل Views
باستخدام Blade لإظهار أو إخفاء عناصر.
مثال في View
إظهار زر “Delete” فقط للمستخدم الذي لديه صلاحية.
Gate vs Middleware
| العنصر | Gate | Middleware |
|---|---|---|
| الوظيفة | صلاحيات دقيقة | حماية عامة |
| الاستخدام | داخل التطبيق | قبل الوصول |
| المرونة | عالية | متوسطة |
Policy و Model Ownership
واحدة من أهم ميزات Policy:
التحقق من ملكية البيانات.
مثال
- هل هذا المستخدم هو صاحب هذا Post؟
لماذا هذا مهم؟
لأن معظم التطبيقات تعتمد على:
- Users
- Posts
- Orders
وكلها مرتبطة بمستخدم معين.
Gate وPolicy في المشاريع الكبيرة
في المشاريع الكبيرة مثل:
- SaaS
- E-commerce
- Dashboards
نظام الصلاحيات يصبح معقدًا جدًا، وبدون Gate وPolicy سيكون الكود غير قابل للإدارة.
أخطاء شائعة
1. كتابة الصلاحيات داخل Controller
2. عدم استخدام Policy عند وجود Models
3. تكرار نفس الشروط
4. عدم توحيد منطق الصلاحيات
كيف تستخدم Gate وPolicy بشكل احترافي؟
1. استخدم Gate للحالات البسيطة
2. استخدم Policy لكل Model مهم
3. افصل الصلاحيات عن Controller
4. اجعل الأسماء واضحة
5. فكر في التوسع من البداية
الفرق بين المبتدئ والمحترف
| المبتدئ | المحترف |
|---|---|
| يكتب شروط عشوائية | يستخدم Gate وPolicy |
| كود مكرر | كود منظم |
| صعب التعديل | سهل التعديل |
| مشاكل أمان | نظام آمن |
هل Gate وPolicy مهمان للمبتدئين؟
نعم، لأن:
- يساعدانك على كتابة كود نظيف
- يجعلانك تفكر بشكل احترافي
- يجهزانك للعمل في شركات
هل يمكن الاستغناء عنهما؟
في مشاريع صغيرة جدًا ربما، لكن في أي مشروع حقيقي لا.
هل صعب تعلمهم؟
Gate سهل جدًا، وPolicy يحتاج بعض الممارسة لكنه بسيط بعد الفهم.
الأسئلة الشائعة (FAQ)
ما هو Gate في Laravel؟
هو نظام بسيط للتحقق من الصلاحيات باستخدام شروط محددة.
ما هو Policy؟
هو نظام متقدم لإدارة الصلاحيات المرتبطة بالموديلات.
ما الفرق بين Gate وPolicy؟
Gate بسيط وسريع، وPolicy أكثر تنظيمًا واحترافية.
متى أستخدم Policy؟
عند التعامل مع Models وعند وجود عمليات متعددة.
هل يمكن استخدام Gate وPolicy معًا؟
نعم، وغالبًا هذا هو الحل الأفضل.
خاتمة
Gate وPolicy في Laravel ليسا مجرد أدوات إضافية، بل هما أساس بناء نظام صلاحيات احترافي وآمن. من خلالهما يمكنك التحكم الكامل في من يمكنه الوصول إلى ماذا داخل التطبيق، بدون فوضى أو تكرار في الكود.
إذا كنت تريد بناء تطبيق قوي في 2026، فإن فهم Authorization واستخدام Gate وPolicy بشكل صحيح هو خطوة أساسية لا يمكن تجاهلها. هذا ما يميز المطور العادي عن المطور المحترف.