我有一个共同的登录管理员和用户。但是我已经在我的表中创建了一个角色,看起来像:
user_id role_id
1 2
2 1
3 2
其中role_id 1
表示管理员,role_id 2
表示用户。我还可以为不同的用户附加角色。现在我想要保护所有的admin路由和user路由。
例如,我不希望user获得任何应该给admin的访问权限。现在我可以查看用户是admin还是像if (Auth::user()->hasRole('admin'))
或if (Auth::user()->hasRole('user'))
这样的用户。
在这种情况下,我应该如何将我的用户路由与管理路由分开?我应该制作自己的中间件并实现吗?如果是,如何正确实现?
创建两个中间件,对于admin您可以这样做:
<?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中间件
在routes.php
你可以做:
Route::group(['middleware' => 'checkAdmin'], function () {
Route::get('admin/profile', function () {
// Uses CheckAdmin Middleware
});
});