多个中间件无法在 laravel 上运行
Multiple middleware not working on laravel
我有一个只能通过 2 个中间件规则之一访问的路由资源组。我已经注册了它们,如果我单独测试它们,它们都可以独立工作,但是当我将它们放在一起时,它们就无法工作
我已经尝试 运行 它们都作为 "or" 语句(这意味着中间件按预期工作)但这意味着任何未登录的人也可以出于某种原因访问路由。如果我用逗号来分隔中间件,那么它对每个人都是屏蔽的。我知道这两个中间件都可以正常工作,因为如果我独立尝试它们,它们确实可以工作。我正在使用下面的代码
Route::group(['middleware' => ['IsAdmin' or 'IsPatreon']], function(){
Route::resource('patreon', 'patreonGalleryController', ['names'=>[
'index'=>'patreonGallery.index',
'create'=>'patreonGallery.create',
'store'=>'patreonGallery.store',
'edit'=>'patreonGallery.edit',
'show'=>'patreonGallery.show',
'destroy'=>'patreonGallery.destroy',
]]);
});
我如何设置它以便只有管理员或 patreon 用户可以看到路径?
两个中间件分开工作。
IsAdmin 正在检查用户是否为管理员
IsPatreon 正在检查用户是否为 patreon...
您不能通过 OR
运算符合并这两个中间件
可能您需要创建新的中间件,例如
IsAdminOrPatreon
并且您是否检查该中间件的内部并将该中间件分配给您的组..
或者你可以尝试使用中间件参数,例如
Route::group(['middleware' => ['checkRoles:admin,patreon']], function(){
Route::resource('patreon', 'patreonGalleryController', ['names'=>[
'index'=>'patreonGallery.index',
'create'=>'patreonGallery.create',
'store'=>'patreonGallery.store',
'edit'=>'patreonGallery.edit',
'show'=>'patreonGallery.show',
'destroy'=>'patreonGallery.destroy',
]]);
});
在你的 checkRoles
中间件中获得 admin
和 patreaon
角色,如下所示:
public function handle($request, Closure $next) {
// will contain ['role1', 'role2']
$allowedRoles = array_slice(func_get_args(), 2);
// here you can loop and check your roles
}
注意!如果您通过 'checkRoles:admin,patreon'
,您将获得
array(admin,patreon)
如果你通过 'checkRoles:admin'
你将获得
array(admin)
您不能在中间件数组中使用 or
条件。中间件数组总是 return and
条件。您可以在中间件中指定用户角色。
你在你的控制器中做这样的事情。
public function __construct()
{
return ($this->middleware('IsAdmin')) || $this->middleware('IsPatreon');
}
此控制器上的每条路由都将由任何一个中间件进行身份验证。
我有一个只能通过 2 个中间件规则之一访问的路由资源组。我已经注册了它们,如果我单独测试它们,它们都可以独立工作,但是当我将它们放在一起时,它们就无法工作
我已经尝试 运行 它们都作为 "or" 语句(这意味着中间件按预期工作)但这意味着任何未登录的人也可以出于某种原因访问路由。如果我用逗号来分隔中间件,那么它对每个人都是屏蔽的。我知道这两个中间件都可以正常工作,因为如果我独立尝试它们,它们确实可以工作。我正在使用下面的代码
Route::group(['middleware' => ['IsAdmin' or 'IsPatreon']], function(){
Route::resource('patreon', 'patreonGalleryController', ['names'=>[
'index'=>'patreonGallery.index',
'create'=>'patreonGallery.create',
'store'=>'patreonGallery.store',
'edit'=>'patreonGallery.edit',
'show'=>'patreonGallery.show',
'destroy'=>'patreonGallery.destroy',
]]);
});
我如何设置它以便只有管理员或 patreon 用户可以看到路径?
两个中间件分开工作。 IsAdmin 正在检查用户是否为管理员 IsPatreon 正在检查用户是否为 patreon...
您不能通过 OR
运算符合并这两个中间件
可能您需要创建新的中间件,例如
IsAdminOrPatreon
并且您是否检查该中间件的内部并将该中间件分配给您的组..
或者你可以尝试使用中间件参数,例如
Route::group(['middleware' => ['checkRoles:admin,patreon']], function(){
Route::resource('patreon', 'patreonGalleryController', ['names'=>[
'index'=>'patreonGallery.index',
'create'=>'patreonGallery.create',
'store'=>'patreonGallery.store',
'edit'=>'patreonGallery.edit',
'show'=>'patreonGallery.show',
'destroy'=>'patreonGallery.destroy',
]]);
});
在你的 checkRoles
中间件中获得 admin
和 patreaon
角色,如下所示:
public function handle($request, Closure $next) {
// will contain ['role1', 'role2']
$allowedRoles = array_slice(func_get_args(), 2);
// here you can loop and check your roles
}
注意!如果您通过 'checkRoles:admin,patreon'
,您将获得
array(admin,patreon)
如果你通过 'checkRoles:admin'
你将获得
array(admin)
您不能在中间件数组中使用 or
条件。中间件数组总是 return and
条件。您可以在中间件中指定用户角色。
你在你的控制器中做这样的事情。
public function __construct()
{
return ($this->middleware('IsAdmin')) || $this->middleware('IsPatreon');
}
此控制器上的每条路由都将由任何一个中间件进行身份验证。