الموقع حالياً تحت التطوير (Beta) 🚀. قد تلاحظ بعض التغييرات أو مميزات قيد العمل.
لارافيل درس تعليمي

إعداد أذونات الوصول المستندة إلى الدور في لارافيل باستخدام حزمة 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

لارافيل
6 دقيقة قراءة

بايبر (Piper): إطلاق قوة مصفوفات وسلاسل لارافيل في PHP الخالصة باستخدام عامل الأنبوب

تُعد أساليب التعامل مع المصفوفات والسلاسل النصية بمرونة في لارافيل متعة حقيقية، حيث توفر طرقًا موجزة ومقروءة لتحويل البيانات. ماذا لو كان بإمكانك جلب نفس هذه ال...

May 23, 2026
اقرأ