Mohamed Sabil 83

مدونة تقنية لكل المهتمين بتطوير المواقع الإلكترونية وأنظمة الويب

Laravel - Vue - Tailwind

حزمة إدارة الصلاحيات laravel permission

حزمة إدارة الصلاحيات laravel permission

تعتبر حزمة laravel permission من Spatie من أهم وأشهر الحزم المتعلقة بإضافة خاصية إدارة الأذونات والصلاحيات للمواقع وأنظمة الويب المنفذة بإطار العمل laravel. فحزمة laravel permission تسمح لك بإضافة كل من الأذونات (Roles) والصلاحيات (Permissions) لأي من أعضاء الموقع أو نظام الويب، الأمر الذي يتيح لك التحكم بالخيارات المتاحة لكل عضو حسب الأذونات أو الصلاحيات الممنوحة له.

عند إضافة حزمة laravel permission إلى مشروعك المنفذ بإطار العمل laravel فإنه يتيح لك عدد من الأوامر من بينها ما يلي (سنذكر استخداماتها في بقية المقالة):

$user->givePermissionTo('edit articles');

$user->assignRole('writer');

$role->givePermissionTo('edit articles');

نأتي الآن لمعرفة كيفية تثبيت حزمة laravel permission وضبط الإعدادات لبدء استخدامها في مشاريعنا، وستكون الخطوات كالتالي:

تثبيت مشروع laravel

كما ذكرنا فإن حزمة laravel permission مخصصة للعمل على إطار العمل لارافل بالتالي سنقوم أولا بإنشاء مشروع جديد بها باستخدام حزمة تثبيت laravel والتي تحدثنا عنها سابقا عبر الأمر التالي:

laravel new project-name

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

تثبيت laravel permission وإعداد موديل المستخدم

سنقوم بتثبيت الحزمة عبر composer باستخدام الأمر التالي:

composer require spatie/laravel-permission

بعد انتهاء عملية التثبيت نقوم بتصدير كلا من ملفي الإعدادات وقاعدة البيانات (migration) عبر الأمر التالي:

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

الآن ننفذ الأمر التالي ليتم حفظ الجداول الخاصة بالحزمة:

php artisan migrate

ويتبقى فقط تحديث موديل المستخدم (افتراضيا app/User.php أو - ابتداء من لارافيل 8 - app/Models/User.php) ليكون بالشكل التالي:

use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;

    // ...
}

إضافة الـ middleware

توفر حزمة laravel permission ثلاثة middlewares تسمح لك بإسناد الأذونات والصلاحيات المناسبة لروابط مشروعك بحيث لا يتمكن من استخدام تلك الروابط إلا من لديه نفس الأذونات و/أو الصلاحيات المحددة. لإضافة الـ middlewares نقوم بإضافتها ضمن مصفوفة routeMiddleware في ملف app/Http/Kernel.php على النحو التالي:

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

بدء الاستخدام

بهذا نكون قد أنهينا عملية تثبيت وإعداد حزمة laravel permission. بإمكانك الآن إضافة الصلاحيات و/أو الأذونات المناسبة وطبيعة مشروعك، وذلك عبر الأوامر التالية:

// إضافة الصلاحيات
$role = Role::create(['name' => 'writer']);

// إضافة الأذونات
$permission = Permission::create(['name' => 'edit articles']);

ولإسناد أي منها للمستخدم المطلوب، فسنقوم بذلك عبر الأوامر التالية:

// إسناد الصلاحيات للمستخدم
$user->assignRole('writer');

// إسناد الأذونات للمستخدم
$user->givePermissionTo('edit articles');

وللتحكم في روابط مشروعك بحيث لا يتمكن من تصفحها إلا صاحب الصلاحيات و/أو الأذونات المناسبة فسنقوم باستخدام أي من الـ middlewares التي قمنا بإعدادها سابقا على الروابط (Routes) الخاصة بالمشروع على النحو التالي:

// لن يتمكن من استعراض الروابط إلا من لديه صلاحية writer
Route::group(['middleware' => ['role:writer']], function () {
    //
});

// لن يتمكن من استعراض الروابط إلا من لديه إذن publish articles
Route::group(['middleware' => ['permission:publish articles']], function () {
    //
});

// لن يتمكن من استعراض الروابط إلا من لديه صلاحية writer أو إذن publish articles
Route::group(['middleware' => ['role:writer','permission:publish articles']], function () {
    //
});

وهكذا نكون قد تعرفنا على كيفية تثبيت حزمة laravel permission وإعدادها ومن ثم كيفية استخدامها. لمعلومات أكثر يمكنك الإطلاع على مستندات الحزمة من هنا.

الكلمات المفتاحية لارافيل laravel صلاحيات اذونات ادارة spatie permission laravel-permission