laravel - 如何在 Laravel 5.6 中创建具有多个角色的中间件?
问题描述
我正在使用 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 角色的用户都可以访问仪表板,但是当我登录时,即使我只有 hrd 角色,404
我如何才能访问?/dashboard
如果用户具有这 3 个角色中的任何一个,那么他可以访问该路线,
解决方案
在 Laravel 中已经有一种方法可以为中间件传输参数。你可以在这里阅读
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');
}
在此示例中,如果至少存在一个传递的参数,您的代码将起作用
推荐阅读
- javascript - 如何检测多维数据集的哪一侧被点击
- angular - Ionic AngularFireDatabase 说即使规则是开放的也没有授权
- ruby-on-rails - 在级联删除时覆盖子对象的默认范围
- mysql - 从列类型 varchar() 获取不同的当前和未来周数和年份
- c - 无法将矩阵分配给**指针
- selenium - 运行 Cucumber 功能时 Chrome 启动两次
- c# - 我应该为我的桌面应用程序使用 Chromium Embedded Framework 还是 .net?
- java - Spring @Transaction 和 @Async 用于数据库操作
- c - 隐藏赋值的C宏技巧?
- bash - 如何逐行比较两个文件并在不同时输出整行