【问题标题】:Middleware overriding other middleware in Laravel中间件覆盖 Laravel 中的其他中间件
【发布时间】:2016-10-09 09:19:02
【问题描述】:

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

我有两种用户类型: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 文件之前应用了中间件过滤器。 为不同的用户类型使用相同的路线最好的方法是什么?

【问题讨论】:

    标签: php laravel laravel-5 routes middleware


    【解决方案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' );
                });
            });
    

    【讨论】:

      【解决方案2】:

      如何使用单个路由并从控制器渲染(返回视图),具体取决于角色,为每个角色使用“if 块”。你能试试吗?

      【讨论】:

        【解决方案3】:

        对于这个要求,我认为您应该检查应用控制器/父控制器中的用户角色,并根据该角色将用户重定向到他们各自的操作。

        【讨论】:

          猜你喜欢
          • 2019-10-16
          • 2016-10-14
          • 1970-01-01
          • 2022-01-25
          • 2021-09-23
          • 1970-01-01
          • 2018-04-25
          • 1970-01-01
          • 2013-03-30
          相关资源
          最近更新 更多