我有管理员和用户的共同登录信息。但我在我的表中创建了一个角色,如下所示:
user_id role_id
1 2
2 1
3 2
其中role_id 1
表示管理员,role_id 2
表示用户。我也可以将角色附加到不同的用户。现在我想要的是,我想保护所有管理路由和用户路由。
例如,我不希望用户获得任何适用于管理员的访问权限。目前,我可以检查用户是管理员还是用户if (Auth::user()->hasRole('admin'))
或if (Auth::user()->hasRole('user'))
。
在这种情况下,如何将用户路由与管理路由分开?我应该制作自己的中间件并实施吗?如果是这样,如何正确实现它?
答案 0 :(得分:0)
创建两个中间件,管理员可以这样做:
<?php namespace App\Http\Middleware;
use Auth;
use Illuminate\Contracts\Routing\Middleware;
class CheckAdmin implements Middleware {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->hasRole('admin'))
{
return $next($request);
}
throw new \Exception("Unauthorized");
}
}
然后在App\Http\Kernel
protected $routeMiddleware = [
'auth' = 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'checkAdmin' => 'App\Http\Middleware\CheckAdmin',
];
您可以在routes.php文件或Controller的构造函数中使用CheckAdmin middlware
在routes.php
中你可以这样做:
Route::group(['middleware' => 'checkAdmin'], function () {
Route::get('admin/profile', function () {
// Uses CheckAdmin Middleware
});
});