Laravel 5:在具有中间件的路由上使用会话闪存消息?

时间:2016-08-23 09:25:13

标签: laravel-5 middleware

我正在开展一个项目,要求我保护一些路线。因此我创建了一个中间件来过滤路由。我用了命令:

php artisan make:middleware MustBeAdmin

我在kernel.php目录下的App\Http文件中注册了此中间件,如下所示:

protected $routeMiddleware = [
               //   ...
    'isAdmin' => \App\Http\Middleware\MustBeAdmin::class,
];

这是我对中间件类的实现:

public function handle($request, Closure $next, $rights = 'user')
{
    $user = $request->user();

    if ($user && $user->isAdmin($rights)) {
        return $next($request);
    }
    return redirect('/');
}

isAdmin()方法是User模型方法,用于检查尝试登录的用户是否为admin。这是它的实施:

public function isAdmin($rights='user'){
    if ($rights) {
        return $this->rights == $rights;
    }

    return !! $this->rights;   
}

这些路线只能由登录的管理员访问。

Route::group(['middleware' => 'isAdmin:admin'], function(){
    Route::get('/', ['as' => 'admin/', 'uses' => 'AdminController@home']);
    Route::get('register/', ['as' => 'admin/register', 'uses' => 'AdminController@register']);
    Route::post('register/', ['as' => 'admin/register', 'uses' => 'AdminController@addAdmin']);
});

现在,任何非管理员用户尝试访问这些路由都会将用户重定向到目标网页,如中间件中的行return redirect('/');所指定。

现在这是我的问题:如何通过会话消息将其重定向到主页。我在哪里设置会话消息,因为请求没有到达AuthController?有没有办法在路由中设置会话变量?

我知道可以在Controller上使用构造函数但我不想这样,因为我仍然希望普通用户(非管理员)访问这些方法。

提前致谢...

0 个答案:

没有答案