中间件覆盖 Laravel 中的其他中间件
Middleware overriding other middleware in Laravel
我目前正在构建我的第一个幼虫应用程序。
我有两种用户类型:buyers
和 sellers
。然而,它们都可以访问相同的路由,但它们需要提供不同的模板和数据。例如,两者都可以访问 /home
,但看到的内容完全不同。
我知道我可以在路由中使用 if 语句,但这变得很混乱。为了尝试解决这个问题,我使用两个不同的路由组制作了两个独立的中间件。每个中间件都会检查用户的权限,如果没有权限则将其注销,如下所示:
if ( Auth::user()->role !== 'buyer' ) {
return redirect( 'login' );
}
我的目标:
- 如果用户'isBuyer',它只读取那个中间件路由组。
- 如果用户'isSeller',它只读取那个中间件组。
我希望同时使用两者:
// this will be triggered if they have the role 'buyer'
Route::group(['middleware' => 'isBuyer'], function () {
Route::get( '/', function ( ) {
return view( '/home-seller' );
});
});
//this will be triggered if they have the role 'seller'
Route::group(['middleware' => 'isSeller'], function () {
Route::get( '/', function ( ) {
return view( '/home-buyer' );
});
});
但它从不读取第二组。 由于第一组的身份验证测试失败,它把我注销了。
我认为这是因为它在完成读取 routes.php 文件之前应用了中间件过滤器。 针对不同的用户类型使用相同的路由,最好的处理方法是什么?
使用单个路由并从控制器渲染(返回视图)如何,具体取决于对每个角色使用 "if blocks" 的角色。可以试试吗
对于此要求,我认为您应该检查应用 controller/parent 控制器中的用户角色,并根据该角色将用户重定向到他们各自的操作。
你可以这样使用:-
$middleware = '';
if ( Auth::user()->role == 'buyer' ) {
$middleware = 'isBuyer';
}
elseif(Auth::user()->role == 'seller') {
$middleware = 'isSeller';
}
else{
return redirect( 'login' );
}
Route::group(['middleware' => $middleware], function () {
Route::get( '/', function ( ) {
return view( '/home-seller' );
});
});
我目前正在构建我的第一个幼虫应用程序。
我有两种用户类型:buyers
和 sellers
。然而,它们都可以访问相同的路由,但它们需要提供不同的模板和数据。例如,两者都可以访问 /home
,但看到的内容完全不同。
我知道我可以在路由中使用 if 语句,但这变得很混乱。为了尝试解决这个问题,我使用两个不同的路由组制作了两个独立的中间件。每个中间件都会检查用户的权限,如果没有权限则将其注销,如下所示:
if ( Auth::user()->role !== 'buyer' ) {
return redirect( 'login' );
}
我的目标:
- 如果用户'isBuyer',它只读取那个中间件路由组。
- 如果用户'isSeller',它只读取那个中间件组。
我希望同时使用两者:
// this will be triggered if they have the role 'buyer'
Route::group(['middleware' => 'isBuyer'], function () {
Route::get( '/', function ( ) {
return view( '/home-seller' );
});
});
//this will be triggered if they have the role 'seller'
Route::group(['middleware' => 'isSeller'], function () {
Route::get( '/', function ( ) {
return view( '/home-buyer' );
});
});
但它从不读取第二组。 由于第一组的身份验证测试失败,它把我注销了。
我认为这是因为它在完成读取 routes.php 文件之前应用了中间件过滤器。 针对不同的用户类型使用相同的路由,最好的处理方法是什么?
使用单个路由并从控制器渲染(返回视图)如何,具体取决于对每个角色使用 "if blocks" 的角色。可以试试吗
对于此要求,我认为您应该检查应用 controller/parent 控制器中的用户角色,并根据该角色将用户重定向到他们各自的操作。
你可以这样使用:-
$middleware = '';
if ( Auth::user()->role == 'buyer' ) {
$middleware = 'isBuyer';
}
elseif(Auth::user()->role == 'seller') {
$middleware = 'isSeller';
}
else{
return redirect( 'login' );
}
Route::group(['middleware' => $middleware], function () {
Route::get( '/', function ( ) {
return view( '/home-seller' );
});
});