تكرار السؤال: …
الإجابة المختصرة
الـ Gates تُعرف لإجراءات عامة غير مرتبطة بنموذج محدد (مثل الدخول للوحة التحكم)، بينما الـ Policies تنظم الصلاحيات حول نموذج معين (مثل PostPolicy).
الشرح
الـ Gates ممتازة للمهام السريعة: Gate::define('access-admin', fn($user) => $user->isAdmin). أما عند الحاجة لإدارة صلاحيات متكاملة لنموذج (عرض، تعديل، حذف، استعادة)، توفر الـ Policies فئة مستقلة تحتوي على دوال view وcreate وupdate وdelete ويتم فحصها بأناقة عبر $user->can('update', $post) أو في Blade بـ @can.
مثال بالكود
class PostPolicy {
public function update(User $user, Post $post): bool {
return $user->id === $post->user_id;
}
}
// استخدام: $this->authorize('update', $post);أخطاء شائعة
- كتابة شروط الصلاحيات يدوياً داخل كود المتحكمات (Controllers) وتكرارها في كل مسار.