中间件覆盖了Laravel

时间:2016-06-08 22:09:25

标签: php laravel laravel-5 routes middleware

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

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

3 个答案:

答案 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' );
            });
        });