المصادقة مقابل التفويض
- المصادقة (Authentication): مَن أنت؟ (تسجيل الدخول)
- التفويض (Authorization): ماذا يُسمح لك أن تفعل؟ (الصلاحيات)
البوّابات (Gates)
للتحقّق البسيط من الصلاحيات. تُعرَّف في AuthServiceProvider:
<?php
use Illuminate\Support\Facades\Gate;
Gate::define('edit-post', function (User $user, Post $post) {
return $user->id === $post->user_id;
});
التحقّق:
<?php
if (Gate::allows('edit-post', $post)) {
// مسموح
}
// أو في المتحكّم — يرمي 403 تلقائيًّا
$this->authorize('edit-post', $post);
السياسات (Policies)
لتنظيم صلاحيات نموذج معيّن في صنف واحد:
php artisan make:policy PostPolicy --model=Post
<?php
class PostPolicy
{
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
public function delete(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
}
التحقّق:
<?php
$this->authorize('update', $post);
// أو
if ($user->can('update', $post)) { /* ... */ }
في قوالب Blade
@can('update', $post)
<a href="/posts/{{ $post->id }}/edit">تعديل</a>
@endcan
@cannot('update', $post)
<p>لا تملك صلاحية التعديل</p>
@endcannot
بوّابات المستخدم الزائر
للسماح بفحوص تعمل حتى لغير المسجّلين، اجعل معامل المستخدم اختياريًّا:
<?php
Gate::define('view-post', function (?User $user, Post $post) {
return $post->published || ($user && $user->id === $post->user_id);
});
أخطاء شائعة
- خلط المصادقة بالتفويض — الأولى للهوية والثانية للصلاحيات.
- نسيان
?Userفتفشل الفحوص للزوّار غير المسجّلين.
🎯 التالي: حماية CSRF والتشفير.