لارافيل, Others / 2024-11-23

كيفية تحديد نوع المستخدم isAdmin في لارافيل، لعرض صفحات admin.

كيفية تحديد نوع المستخدم isAdmin في لارافيل، لعرض صفحات admin.

2024-11-23 وقت القراءه : 2 دقائق

كما نعلم جميعنا أن لارافيل تقدم لنا users auth functionality بشكل إفتراضي من أجل القيام بعملية تسجيل الدخول وذلك للوصول لصفحات معينة، لكن ببعض الأحيان نحتاج لنوعين من المستخدمين لكل منهم صفحات معينة يستطيع زيارتها مثلا مستخدم عادي user وكذلك isAdmin وذلك للوصول لصفحات إدارة الموقع أو التطبيق.

هنا سوف يتم إستخدام حزمة laravel breez من أجل عملية authorization ( تسجيل الدخول).

composer require laravel/breeze --dev
php artisan breeze:install
php artisan migrate
npm install
npm run dev


كيف يمكن إنشاء isAdmin user في إطار العمل لارافيل.

إنشاء حقل is_admin في جدول users

بداية يجب إضافة حقل جديد لجدول الـ users ويكون مثلا بإسم is_admin وذلك من خلال إنشاء ملف migration جديد

 php artisan make:migration "add is admin to users"  

إضافة الحقل is_admin للملف الـ migration الذي تم إنشاؤه

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->boolean('is_admin');
    });
}


إنشاء Middleware للتحقق من نوع المستخدم الذي قام بتسجيل الدخول

نحتاج لإنشاء middleware جديد مثلا بإسم isAdminMiddleware

 php artisan make:middleware isAdminMiddleware  

في داخل الكلاس isAdminMiddleware نحتاج لإضالة الـ login حيث يقوم بالتحقق من نوع المستخدم إذا كان is_admin== true يقوم بتمرير الـ request وعرض صفحات الأدمن، أما إذا كانت false يرجع الخطأ 403

class isAdminMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        if(!auth()->user()->is_admin){
            abort(403);
        }
        return $next($request);
    }
}


تسجيل الـ middleware

نحتاج لتسجيل الـ middleware الذي قمنا بإنشاؤه، ويتم تسجيله في الملف app/http/kernel.php فنضعه بداخل المصفوفة routeMiddleware

protected $routeMiddleware = [
    'is_admin' => isAdminMiddleware::class
];


إضافة middleware لملف route

في ملف web.php نقوم بإضافة الـ middleware الذي قمنا بإنشاؤه وتسجيله لحماية الصفحات التي يجب أن لا يتم تسجيل الدخول لها إلا إذا كان نوع المستخدم is_admin بمعنى أن قيمة الحقل is_admin في جدول users يجب ان تكون 1.

Route::group(['middleware' => ['is_admin']],function (){
        Route::get('/admin', function () {
            return view('admin');
        })->name('admin');
    });
});

كما نلاحظ بالأعلى ان الـ route /admin محمي ولا يمكن تمرير صفحة admin إلا إذا كان نوع المستخدم is_admin == true


توضيح من جدول users

كما نلاحظ في الصوره أن المستخدم (1,3,4,8) فقط هم من يسمح لهم بزيارة صفحات admin.


توضيح أخر

Route::group(['middleware' => ['auth']],function (){
    Route::get('/dashboard', function () {
        return view('dashboard');
    })->name('dashboard');


    Route::group(['middleware' => ['is_admin']],function (){
        Route::get('/admin', function () {
            return view('admin');
        })->name('admin');
    });
});

كما نلاحظ في ملف web.php أعلاه أنه يوجد نوعين من middleware الأول هو auth بمعنى أن جميع المستخدمين المسجلين دخول بغض النظر عن قيمة الحقل is_admin سوف يسمح لهم بعرض صفحة dashboard، أما النوع الثاني وهو is_admin فقط إذا كانت قيمة الحقل is_admin في جدول users=1 فقط هم من يسمح لهم بعرض صفحة admin.


التعليقات
زائر
منذ سنة

لو امكن حضرتك تعرفنا الطرق الاخري زي ان يبقي في جدول خاص بالادمن مثلا والصلاحيات .. شكر جزيلا

زائر
منذ سنة

شكرا كتير عالمعلومات القيمة والشرح المبسط

زائر
منذ 6 أشهر

جزاك الله خيرا شرح مبسط ومفهوم

إضافة تعليق
Loading...