我想制作一个中间件来保护laravel 5.2 app中的管理路由 . user_type不是我的数据库中的users表中的字段,而是在单独的表中:
管理员的user_type_id是4我制作了这个中间件:
class AdminMiddleware
{
public function handle($request, Closure $next)
{
$authedUserID = Auth::id();
$user = User::query()
->leftjoin('users_user_types as uut', 'uut.user_id', '=', 'users.id')
->where('uut.user_id',"=","$authedUserID")
->get(['users.*',
'uut.user_type_id as userType'])->first();
if ($user['userType'] !=4)
{
return redirect('/home');
}
return $next($request);
}
}
并把它放在kernel.php中的$ routeMiddleware数组中:
'admin' => \App\Http\Middleware\AdminMiddleware::class
这是我想要应用我的中间件的管理路由之一:
Route::get('ptyadmin', 'AdminController@show')->middleware('admin');
The Problem 是当我使用admin用户(user_type = 4)或普通用户(user_type = 1)进入此路由时,它会在两种情况下重定向到/ home!
Why does this happen and how can I fix it ??
2 回答
first
方法返回对象也可以使用
select
代替get
当我在routes.php中放入jwt.auth中间件时,它可以工作:
而不是把它放在AdminController中:
{
}