我有一个路由资源组,只能由2个中间件规则之一访问。我已经注册了它们,并且如果我单独测试它们,它们都可以独立工作,但是当我将它们放在一起时,它们将无法工作
我尝试将它们都作为“或”语句运行(这意味着中间件按预期运行),但这意味着未登录的任何人也可以出于某种原因访问路由。如果我使用逗号分隔中间件,那么它将被所有人屏蔽。我知道两种中间件都可以正常工作,因为如果我单独尝试它们,它们就可以正常工作。我正在使用以下代码
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使用者才能看到路径?
答案 0 :(得分:0)
两个中间件分别工作。 IsAdmin正在检查用户是admin 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)
答案 1 :(得分:0)
您不能在中间件数组中使用or
条件。中间件数组始终返回and
条件。您可以在中间件中指定用户角色。