كما نعلم جميعنا أن لارافيل تقدم لنا 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.
شكرا كتير عالمعلومات القيمة والشرح المبسط
جزاك الله خيرا شرح مبسط ومفهوم
زائر
لو امكن حضرتك تعرفنا الطرق الاخري زي ان يبقي في جدول خاص بالادمن مثلا والصلاحيات .. شكر جزيلا