Laravel 中用户角色的中间件
Middleware for user roles in Laravel
我正在创建一个管理面板,但访问有问题,我正在使用一对多关系,我有 table 用户 role_id=3
。
这个中间件工作正常,但我需要正确保护路由。
class Administrador
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('/administrador');
}
}
return $next($request);
}
}
路由设置正确,但我不知道如何在这个中间件中发送用户的角色。
...
编辑
如果你想在一个中间件中组合 Administrador
它将是:
class Administrador
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $roles = null, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('/administrador');
}
}
$roles = explode('|', $roles);
if (! in_array(Auth::guard($guard)->user()->role_id, $roles) {
return response('Unauthorized.', 401);
}
return $next($request);
}
}
路线用法示例:
Route::group(['middleware' => 'administrador:1|2'], function () {});
administrador:1|2
用 |
分隔的角色 ID 替换值,如果你想使用另一个 guard
然后你可以将它作为第二个参数传递,例如:administrador:1|2,custom_guard
.这样您就可以定义多个能够访问您的管理屏幕的角色。
如果您想使用一个固定角色:
class Administrador
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('/administrador');
}
}
if (Auth::guard($guard)->user()->role_id !== 3) {
return response('Unauthorized.', 401);
}
return $next($request);
}
}
我正在创建一个管理面板,但访问有问题,我正在使用一对多关系,我有 table 用户 role_id=3
。
这个中间件工作正常,但我需要正确保护路由。
class Administrador
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('/administrador');
}
}
return $next($request);
}
}
路由设置正确,但我不知道如何在这个中间件中发送用户的角色。
...
编辑
如果你想在一个中间件中组合 Administrador
它将是:
class Administrador
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $roles = null, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('/administrador');
}
}
$roles = explode('|', $roles);
if (! in_array(Auth::guard($guard)->user()->role_id, $roles) {
return response('Unauthorized.', 401);
}
return $next($request);
}
}
路线用法示例:
Route::group(['middleware' => 'administrador:1|2'], function () {});
administrador:1|2
用 |
分隔的角色 ID 替换值,如果你想使用另一个 guard
然后你可以将它作为第二个参数传递,例如:administrador:1|2,custom_guard
.这样您就可以定义多个能够访问您的管理屏幕的角色。
如果您想使用一个固定角色:
class Administrador
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('/administrador');
}
}
if (Auth::guard($guard)->user()->role_id !== 3) {
return response('Unauthorized.', 401);
}
return $next($request);
}
}