laravel 中间件返回带有参数的$next($request)

ecbunoof  于 2023-02-25  发布在  其他
关注(0)|答案(1)|浏览(263)

我有一个问题,我创建了一个中间件多重身份验证,以限制每个用户角色(角色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');
});
mpbci0fu

mpbci0fu1#

这个问题应该通过gates和policy来解决。你创建一个用户,给他分配角色,给gates分配合适的角色,给每个方法分配policy。我不太明白你为什么要重写一些已经在框架中实现的功能。请看一下文档。这应该是第一步。YouTube上有很多关于如何管理角色、gates和policy的教程。
https://laravel.com/docs/10.x/authorizationhttps://laravel-news.com/laravel-gates-policies-guards-explained

相关问题