Pada aplikasi yang lebih komplek dibutuhkan sebuah middleware untuk penyaringan HTTP request yang masuk ke aplikasi , apabila user berhasil melakukan otentikasi lalu difilter oleh middleware yang akan mengizinkan untuk melakukan request selanjutnya sesuai dengan hak akses user yg login jika tidak sesuai maka bisa di berikan pesan forbiden
Buat file middleware php artisan make:middleware AdminMiddleware
<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
use Auth;
use AppModelsUser;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure(IlluminateHttpRequest): (IlluminateHttpResponse|IlluminateHttpRedirectResponse) $next
* @return IlluminateHttpResponse|IlluminateHttpRedirectResponse
*/
public function handle(Request $request, Closure $next)
{
if( !( Auth::check() && Auth::user()->roles()->first()->name == 'admin' ) ) abort(403);
return $next($request);
}
}
Buka file /app/HTTP/kernel.php
modifikasi pada blok protected $routeMiddleware
'admin' => AppHttpMiddlewareAdminMiddleware::class,
Untuk penerapan middleware nya kita edit /routes/web.php
<?php
use IlluminateSupportFacadesRoute;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::group(['middleware' => ['web'] ], function () {
Route::get('/dashboard', function () {
return Auth::user()->roles()->first()->name =='admin'
? redirect()->route('admin.dashboard')
: redirect()->route('user.dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
});
// ADMIN GROUP
Route::group([
'prefix' => 'admin',
'as' => 'admin.',
'namespace' => 'AppHttpControllersAdmin',
'middleware' => ['auth', 'admin']
], function () {
Route::get('/', 'DashboardController@index')->name('dashboard');
});
// USER GROUP
Route::group([
'prefix' => 'user',
'as' => 'user.',
'namespace' => 'AppHttpControllersUser',
'middleware' => ['auth']
], function () {
Route::get('/', 'DashboardController@index')->name('dashboard');
});
Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'] )->middleware('auth')->name('logout');
require __DIR__.'/auth.php';
Dari routes/web.php diatas kita musti membuat 2 controller masing2 untuk role admin dan user
php artisan make:controller admin/DashboardController
kita membuat DashboardController didalam folder admin supaya website kita terorganisir dengan rapi.
Hal yang sama juga untuk user dashboardcontroller
php artisan make:controller user/DashboardController --resource
Untuk file /resources/views/ juga dipisahkan
Untuk struktur layouts nya juga dipisahkan antara admin dan user
Video