我想将中间件auth分为两个角色,一个用于管理员,第二个用于用户 但是有些路由用于所有用户和管理员,而且很少有路由仅供管理员使用,我怎么能用路由分开?
Auth::routes();
Route::group(['middleware' => 'auth'], function () {
//Some route here
});
Route::group(['middleware' => ['guest']], function () {
//some route here
});
答案 0 :(得分:3)
这是我的管理员和用户访问控制的实现(在我的情况下代理)我的用户表(is_admin
)中有一个布尔字段,普通用户为0,管理员为1。
在您的用户模型中添加以下内容:
protected $casts = [
'is_admin' => 'boolean',
];
public function isAdmin()
{
return $this->is_admin;
}
为管理员和代理创建新的中间件:
php artisan make:middleware Admin
php artisan make:middleware Agent
中间件文件将在App\Http\Middleware\
将其添加到Admin.php
内的课程
public function handle($request, Closure $next)
{
if ( Auth::check() && Auth::user()->isAdmin() )
{
return $next($request);
}
return redirect('/agent');
}
将此添加到Agent.php
public function handle($request, Closure $next)
{
if ( Auth::check() && !Auth::user()->isAdmin() )
{
return $next($request);
}
return redirect('/home');
}
在使用laravel注册您的中间件之后,将其添加到位于protected $routeMiddleware
的{{1}}中的Kernel.php
app\Http\Kernel.php
确保为我们在中间件文件中提到的重定向创建正确的路由。在此之后你几乎完成了。现在验证用户是管理员还是普通用户将其添加到控制器的构造函数方法中。
仅允许管理员用户执行操作:
'admin' => 'App\Http\Middleware\Admin',
'agent' => 'App\Http\Middleware\Agent',
仅允许普通(代理)用户执行操作:
public function __construct()
{
$this->middleware('auth');
$this->middleware('admin');
}
或者您也可以在路线中添加中间件,
public function __construct() {
$this->middleware('auth');
$this->middleware('agent');
}