中间件覆盖 Laravel 中的其他中间件

Middleware overriding other middleware in Laravel

我目前正在构建我的第一个幼虫应用程序。

我有两种用户类型:buyerssellers。然而,它们都可以访问相同的路由,但它们需要提供不同的模板和数据。例如,两者都可以访问 /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 文件之前应用了中间件过滤器。 针对不同的用户类型使用相同的路由,最好的处理方法是什么?

使用单个路由并从控制器渲染(返回视图)如何,具体取决于对每个角色使用 "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' );
            });
        });