我有一个问题,我创建了一个中间件多重身份验证,以限制每个用户角色(角色1,2,3,4,5,6)的访问,但问题是,所有用户角色都无法访问我设置的页面并重定向到 Jmeter 板。
只有manageusers页面可以访问的角色:1,当我尝试添加访问manageusers页面上的角色:3然后那些谁有权访问manageusers页面的角色:1和角色:3.我尝试登录角色:1它甚至不工作访问manageusers页面,然后重定向到 Jmeter 板,否则当我尝试登录角色:3可以访问manageusers页面。
如何妥善落实呢?
中间件Cek用户登录
public function handle(Request $request, Closure $next, $rules)
{
if(!Auth::check()) {
return redirect('login');
}
$user = Auth::user();
if($user->roles == $rules) {
return $next($request);
}
return redirect('login')->with('error', "You don't have permission to access this page.");
}
内核
'cekUserLogin' => \App\Http\Middleware\CekUserLogin::class
途径
Route::middleware(['auth', 'cekUserLogin:1'])->group(function () {
Route::get('users', [UserController::class, 'index'])->name('users');
Route::get('salesorder', [SoController::class, 'index'])->name('salesorder');
Route::get('purchaseorder', [PoController::class, 'index'])->name('purchaseorder');
});
Route::middleware(['auth', 'cekUserLogin:2'])->group(function () {
Route::get('salesorder', [SoController::class, 'index'])->name('salesorder');
Route::get('purchaseorder', [PoController::class, 'index'])->name('purchaseorder');
});
Route::middleware(['auth', 'cekUserLogin:3'])->group(function () {
Route::get('salesorder', [SoController::class, 'index'])->name('salesorder');
Route::get('purchaseorder', [PoController::class, 'index'])->name('purchaseorder');
});
Route::middleware(['auth', 'cekUserLogin:4'])->group(function () {
Route::get('salesorder', [SoController::class, 'index'])->name('salesorder');
});
Route::middleware(['auth', 'cekUserLogin:5'])->group(function () {
Route::get('salesorder', [SoController::class, 'index'])->name('salesorder');
});
Route::middleware(['auth', 'cekUserLogin:6'])->group(function () {
Route::get('salesorder', [SoController::class, 'index'])->name('salesorder');
Route::get('purchaseorder', [PoController::class, 'index'])->name('purchaseorder');
});
1条答案
按热度按时间mpbci0fu1#
这个问题应该通过gates和policy来解决。你创建一个用户,给他分配角色,给gates分配合适的角色,给每个方法分配policy。我不太明白你为什么要重写一些已经在框架中实现的功能。请看一下文档。这应该是第一步。YouTube上有很多关于如何管理角色、gates和policy的教程。
https://laravel.com/docs/10.x/authorizationhttps://laravel-news.com/laravel-gates-policies-guards-explained