Php 如何在控制器';拉维尔的建筑工人?
Php 如何在控制器';拉维尔的建筑工人?,php,laravel,middleware,Php,Laravel,Middleware,Kernel.php 'admin'=>\App\Http\Middleware\admin::class, “超级管理员”=>\App\Http\Middleware\SuperAdmin::class, 'seller'=>\App\Http\Middleware\seller::class, 我已经创建了三个不同的middlewere。下面是kernel.php 例如,我想让这三个用户都可以访问仪表板管理员,超级管理员和卖家 DashboardController.php 函数uuu构造
Kernel.php
'admin'=>\App\Http\Middleware\admin::class,
“超级管理员”=>\App\Http\Middleware\SuperAdmin::class,
'seller'=>\App\Http\Middleware\seller::class,
我已经创建了三个不同的middlewere
。下面是kernel.php
例如,我想让这三个用户都可以访问仪表板<代码>管理员,超级管理员
和卖家
DashboardController.php
函数uuu构造()
{
$this->middleware(['super_admin','admin','seller']);
}
但是这个多个中间件不起作用
没有错误,但我无法访问管理路由
单曲完美
参考资料
web.php
Route::get('admin','DashboardController@index')->name('dashboard.index');
路由::get('admin/shops','DashboardController@shops')->name('dashboard.shops');
我终于解决了这些问题
特别感谢Remul和Pilanbro提供的宝贵参考资料。
第一步
Middlewere/AdminPanel.php
公共函数句柄($request,Closure$next,$super\u adminRole,$adminRole,$sellerRole)
{
$roles=Auth::check()?Auth::user()->role->pull('name')->toArray():[];
if(在数组中($super\u adminRole,$roles)){
返回$next($request);
}else if(在_数组中($adminRole,$roles)){
返回$next($request);
}else if(在数组中($sellerRole,$roles)){
返回$next($request);
}
返回重定向::路由('home');
}
在角色
表中有3个角色<代码>超级管理员,管理员
和卖家
在数组中,$roles
包含这些角色
因此,在if
条件中,与null
相比,null将给出false
,因此该条件将不满足
步骤2
Kernel.php
protected$routeMiddleware=[
“adminPanel”=>\App\Http\Middleware\adminPanel::class,
];
步骤3
DashboardController.php
4种变体
函数uuu构造()
{
$this->中间件(['adminPanel:super_admin,admin,seller']);
}
在这里,super\u admin
,admin
和seller
可以访问
函数uuu构造()
{
$this->middleware(['adminPanel:super_admin,null,null']);
}
这里super\u admin
可以访问
函数uuu构造()
{
$this->middleware(['adminPanel:null,admin,null']);
}
这里admin
可以访问
函数uuu构造()
{
$this->middleware(['adminPanel:null,null,seller']);
}
此处卖家可以访问
您遇到了什么错误?什么是“但是这个多中间件不起作用”呢?你犯了什么错误?您肯定可以将多个中间件作为一个数组传递给$this->middleware()
。问题可能是您有三个不同的中间件用于不同的角色,您应该有一个中间件,您可以传递所有应具有访问权限的角色,否则超级管理员
具有访问权限,但由于他不是管理员
或卖家
,因此他没有访问权限。为了访问路由,请求必须通过所有中间件。@ImrulHasan请看一看,这样您可以传递多个应该有权访问中间件的角色,然后您可以检查经过身份验证的用户是否有任何角色。如果您试图保护特定路由,您可能需要看一看。你也可以这样做:)