我正在使用Sentinel软件包,例如,我已经创建了中间件PCMiddleware
public function handle($request, Closure $next)
{
$roles = array_slice(func_get_args(), 2);
foreach ($roles as $role) {
if(Sentinel::check() && Sentinel::getUser()->inRole($role)){
return $next($request);
} else {
return redirect()->route('admin.errors');
}
}
}
路线:
$route->get('dashboard', ['as' => 'dashboard', 'uses' => 'AdminController@dashboard'])->middleware('role_check:member,hrd,super-admin');
并且我还创建了一个具有角色hrd
的用户,该角色具有hrd角色的任何用户都可以访问仪表板,但是当我以404
登录最终用户时,如何访问{{1} },即使我只担任hrd角色?
如果用户具有这三个角色中的任何一个,则可能会这样,然后他可以访问路由,
答案 0 :(得分:1)
在Laravel中已经有一种为中间件传递参数的方法。您可以阅读有关here
的信息public function handle($request, Closure $next)
{
$roles = array_slice(func_get_args(), 2);
$status = false;
foreach ($roles as $role) {
if(Sentinel::check() && Sentinel::getUser()->inRole($role)){
$status = true;
break;
}
}
if ($status) {
return $next($request);
}
return redirect()->route('admin.errors');
}
在此示例中,如果存在至少一个传递的参数,则您的代码将起作用