【问题标题】:Protect routes with middleware Laravel使用中间件 Laravel 保护路由
【发布时间】:2015-12-17 17:15:24
【问题描述】:

我已经在我的应用程序中实现了中间件角色和权限控制,但我不明白为什么它只允许我定义一个“/”路由。即使我覆盖了 AuthController redirectTo 变量,第二个仍然指向“/home”。

我的路线:

Route::group(['middleware' => 'role:user'], function()
{
 Route::get('/', 'ScoresController@user');

});

Route::group(['middleware' => 'role:admin'], function()
{
Route::get('/', 'PagesController@home');
});

在任何情况下,在身份验证后,用户角色重定向到“/home”的用户。

【问题讨论】:

  • 中间件不是 if 语句。一条路由只能转到一个控制器和操作,您的中间件只会验证用户是否有权访问该路由。在您的情况下,最后一条路线将覆盖上一条路线。
  • @SimonSvensson 感谢您的解释。

标签: laravel authentication middleware


【解决方案1】:

就像 Simon 说的那样,您的第二条路线将覆盖第一条路线,您可以做的是加载另一个控制器,通过 redirect() 将您重定向到另一个页面 或将其编写为路由本身。

可能是这样的:

Route::get('/', function(){
    $user = Auth::user();

    if($user->is('admin') {
        return redirect('admin');
    }else{
        return redirect('user');
    }
});

Route::get('admin', ['middleware' => 'role:admin', 'uses'=> 'PagesController@home']);

这只是众多可能性之一,希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 2021-09-28
    • 2019-12-04
    • 2021-09-06
    • 2021-11-23
    • 2019-09-13
    • 2023-03-28
    • 2018-09-25
    • 2016-01-08
    相关资源
    最近更新 更多