多个中间件无法在 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 中间件中获得 adminpatreaon 角色,如下所示:

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');
}

此控制器上的每条路由都将由任何一个中间件进行身份验证。