اذهب إلى المحتوى

السؤال

نشر

أقوم بإنشاء routes مخصصة للادمن, بحيث لا يستطيع المستخدم الدخول إليها إلا إن كان يمتلك صلاحية ادمن

وإن حاول المستخدم الوصول إليها يقوم باعادة التوجيه مع خطأ 403

هذا ملف routes الخاص بالبرنامج

<!-- Route group -->
$router->group(['middleware' => 'auth'], function() {
    Route::get('dashboard','WelcomeController@index');
   
    <!—جزء الادمن -->
    if(Auth::check()){
        if ( Auth::user()->type == "Admin" ){

            //Report
            Route::get('report','ReportController@index');
            Route::get('report/create', array('as'=>'report.create', 'uses'=>'ReportController@create'));
            Route::post('report/store','ReportController@store');
            Route::get('report/{id}', array('before' =>'profile', 'uses'=>'ReportController@show'));
            Route::get('report/{id}/edit', 'ReportController@edit');
            Route::put('report/{id}/update', array('as'=>'report.update', 'uses'=>'ReportController@update'));
            Route::delete('report/{id}/destroy',array('as'=>'report.destroy', 'uses'=>'ReportController@destroy'));

        }
    }

});

ولكن لا يعمل ولا يقوم بإعادة التوجيه حيث أريد

Recommended Posts

  • 0
نشر

يمكنك استخدام Middleware يتحقق من صلاحية المستخدم والتحكم بإعادة التوجيه وتطبيقه على routes التي تريدها

بدايةً نقوم بإنشاء middleware باسم AdminMiddleware عن طريق الأمر:

php artisan make:middleware AdminMiddleware
                            ^^^^^^^^^^^^^^^
                            اسم ملف middleware

وبداخله نقوم بالتحقق من امتلاك المستخدم لصلاحية admin والسماح له بالمرور, وغير ذلك نقوم بإعادة توجيهه إلى الخطأ 403

namespace App\Http\Middleware;
use Auth;
...

class AdminMiddleware
{
   public function handle($request, Closure $next){
      	if (Auth::user()->type !== "admin") { // إن كان المستخدم لا غير مصرح له بالدخول
      		abort(403, 'Unauthorized action.'); // توليد الخطأ 403
    	}

    	return $next($request); // غير ذلك نقوم بالسماح له بالمرور
   }
}

ولا ننسى استدعاء

use Auth;

للوصول لبيانات المستخدم

بعد ذلك: نقوم بتسجيل AdminMiddleware ضمن قائمة الـ middleware  لنتمكن من استدعائه مباشرة عن طريق الاسم, وذلك في ملف Kernel.php بداخل المسار:

app\Http\Kernel.php:

نبحث عن $routeMiddleware ونضيف بداخله مسار AdminMiddleware والاسم المستعار الذي سنستخدمه في routes

...
protected $routeMiddleware = [
	...
	'admin' => 'App\Http\Middleware\AdminMiddleware',
];
...

وبهذا نكون قد سجلنا AdminMiddleware باسم admin

ونقوم بتطبيقه على routes المحددة كمجموعة

Route::group(['middleware' => ['auth', 'admin']], function() {
	Route::get('report','ReportController@index');
	Route::get('report/create', array('as'=>'report.create', 'uses'=>'ReportController@create'));
	...
});

 

  • 0
نشر

توفر لارافل Middlewars لتعطيك قابلية تحكم أكثر في مشروعك فيمكنك من خلال Middlewase تحديد صلاحيات و أدوار الأعضاء و السماح بالتحكم في الصفحات من خلال المشاهدة والتحكم و الحذف والتعديل, فيمكنك إنشاء Middleware باستخدام الأمر التالي 

php artisan make:middleware IsAdmin

فستلاحظ أنه تم إنشاء هذا الملف في المسار التالي 

app\Http\Middleware\IsAdmin.php

فيتم وضع التالي 

if (Auth::user() &&  Auth::user()->type !== "admin") {
	return redirect('home')->with('error','You have not admin access');
}
return $next($request);

بداخل الملف في دالة handle فيصبح الملف كاملاً بهذا الشكل 

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;

class IsAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Auth::user() &&  Auth::user()->type !== "admin") {
			return redirect('home')->with('error','You have not admin access');
        }
             return $next($request);

    }
}

وفي المسار التالي لملف Kernel.php 

app\Http\Kernel.php

يمكنك في المصفوفة $routeMiddleware وضع مسار ملف Middleware الذي تم إنشاءه بهذه الطريقة 

'admin' => \App\Http\Middleware\IsAdmin::class,

ويمكنك تحديد المسارات لمسؤولين الموقع وهم Admins عن طريق استخدام هذا Middleware 

Route::group(['middleware' => ['auth', 'admin']], function() {
	...
});

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...