In my case i have 9 role (for login). This role have their own controller.
I want to make only admin can access admin middleware but admin can access other middleware. So I created my custom middleware like this
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class Cek_Login
{
public function handle(Request $request, Closure $next, $roles)
{
if (!Auth::check()) {
return redirect('login');
}
$user = Auth::user();
if($user->level == $roles)
return $next($request);
return redirect()->route('cannot_access');
}
}
Here's my authenticate in controller
public function authenticate(Request $request)
{
$credentials = $request->validate([
'email' => 'required|',
'password' => 'required'
]);
if (Auth::attempt($credentials)){
$user = Auth::user();
if($user->level == 'admin'){
$request->session()->regenerate();
return redirect()->intended('admin');
}
elseif ($user->level == 'jaringan'){
$request->session()->regenerate();
return redirect()->intended('jaringan');
}
return redirect()->intended('login')->with('error', 'Login Gagal');
} else
return back()->with('error', 'Login Gagal');
}
and this is my route
Route::group(['middleware' => ['auth']], function(){
// =============================== Admin Page =================================
Route::group(['middleware' => ['cek_login:admin']], function (){
Route::get('register', [AuthController::class, 'register'])->name('register');
Route::post('register', [AuthController::class, 'store'])->name('register.store');
Route::get('admin',[AdminController::class,'index'])->name('admin.index');
Route::delete('admin/destroy/{pengaduan:kode}',[AdminController::class,'destroy'])->name('admin.destroy');
});
// =================================== Jaringan Page ===========
// Route::middleware('cek_login:jaringan')->middleware('cek_login:admin')->group(function (){
// Route::middleware(['cek_login:jaringan','cek_login:admin'])->group(function (){
Route::middleware(['cek_login:jaringan' OR 'cek_login:admin'])->group(function (){
route::get('/jaringan',[JaringanController::class,'index'])->name('jaringan.index');
route::get('jaringan/detail/{pengaduan:kode}',[JaringanController::class,'detail'])->name('jaringan.detail');
route::get('jaringan/update/{pengaduan:kode}',[JaringanController::class,'update'])->name('jaringan.update');
route::post('jaringan/update/{pengaduan:kode}',[JaringanController::class,'update_store'])->name('jaringan.update.store');
});
});
How can i solve this problem ?
Can anyone help me solve this problem as soon as possible. Thank you in advanced