لارافيل درس تعليمي

إعداد أذونات الوصول المستندة إلى الدور في لارافيل باستخدام حزمة Spatie

Admin User
Admin User
Apr 27, 2026
2 دقيقة قراءة

Key Takeaways

  • ## المقدمة
  • في تطبيقات الويب الحديثة تحتاج إلى التحكم فيما يستطيع كل مستخدم فعله. يوفر لارافيل نظام بوابات بسيط، لكن لتطبيق أذونات معقدة على أساس الدور تُعد حزمة...

المقدمة #

في تطبيقات الويب الحديثة تحتاج إلى التحكم فيما يستطيع كل مستخدم فعله. يوفر لارافيل نظام بوابات بسيط، لكن لتطبيق أذونات معقدة على أساس الدور تُعد حزمة spatie/laravel-permission الأكثر شهرة.

التثبيت #

composer require spatie/laravel-permission

نشر الإعدادات والهجرات #

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan migrate

إعداد الأدوار والأذونات #

أضف السمة HasRoles إلى نموذج User الخاص بك:

use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
}

إنشاء الأدوار والأذونات، على سبيل المثال في Seeder:

use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

Permission::create(['name' => 'edit articles']);
Permission::create(['name' => 'delete articles']);

$admin = Role::create(['name' => 'admin']);
$admin->givePermissionTo(['edit articles', 'delete articles']);

$author = Role::create(['name' => 'author']);
$author->givePermissionTo('edit articles');

إسناد الأدوار للمستخدمين #

$user = User::find(1);
$user->assignRole('admin'); // أو
$user->syncRoles(['author']);

استخدام الـ Middleware #

أضف الـ Middleware إلى app/Http/Kernel.php:

protected $routeMiddleware = [
    // …
    'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
    'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
];

حماية المسارات:

Route::group(['middleware' => ['role:admin']], function () {
    Route::delete('/articles/{id}', 'ArticleController@destroy');
});

Route::get('/articles/{id}/edit', 'ArticleController@edit')
    ->middleware('permission:edit articles');

فحص الأذونات داخل Blade #

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

@role('admin')
    <button>Delete</button>
@endrole

الاختبار #

public function test_admin_can_delete_article()
{
    $admin = User::factory()->create()->assignRole('admin');
    $article = Article::factory()->create();

    $this->actingAs($admin)
         ->delete(route('articles.destroy', $article))
         ->assertRedirect();
}

الخاتمة #

مع حزمة spatie/laravel-permission يمكنك تنفيذ نظام أذونات مستند إلى قاعدة بيانات في دقائق. لا تنسَ تفعيل التخزين المؤقت للأذونات في بيئة الإنتاج لأفضل أداء:

php artisan permission:cache-reset

FAQs

هل أحتاج إلى تشغيل أمر بعد إضافة أذونات جديدة؟
نعم، قم بتشغيل `php artisan permission:cache-reset` لتفريغ ذاكرة التخزين المؤقت للأذونات حتى يتم التعرف على الأذونات الجديدة.
هل يمكنني إسناد أدوار متعددة لمستخدم واحد؟
نعم، يمكنك استعمال `$user->assignRole(['admin', 'editor']);` أو `$user->syncRoles([...]);` لإدارة أدوار متعددة للمستخدم.

Want more content like this?

Explore more tutorials in the لارافيل section.

Explore لارافيل

You might also like