我正在构建我的第一个幼虫应用程序。
我有两种用户类型:buyers
和sellers
。但是,他们都可以访问相同的路由,但需要提供不同的模板和数据。例如,两者都可以访问/home
,但会看到完全不同的内容。
我知道我可以在路线中使用if语句,但那会变得混乱。为了尝试解决这个问题,我使用两个不同的路由组制作了两个独立的中间件。每个中间件都会检查用户是否允许,如果没有,则将其记录下来,如下所示:
if ( Auth::user()->role !== 'buyer' ) {
return redirect( 'login' );
}
我的目标:
我希望同时使用两者:
// 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文件之前应用了中间件过滤器。 处理针对不同用户类型使用相同路由的最佳方法是什么?
答案 0 :(得分:1)
如何使用单个路径并从控制器渲染(返回视图),具体取决于角色使用每个角色的“if blocks”。你能试试吗?
答案 1 :(得分:1)
对于此要求,我认为您应该检查应用控制器/父控制器中的用户角色,并根据该角色将用户重定向到各自的操作。
答案 2 :(得分:1)
您可以使用以下内容: -
$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' );
});
});