我正在开展一个项目,要求我保护一些路线。因此我创建了一个中间件来过滤路由。我用了命令:
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上使用构造函数但我不想这样,因为我仍然希望普通用户(非管理员)访问这些方法。
提前致谢...