laravel中如何对中间件进行或运算

How to make an OR operation for middleware in laravel

Laravel 5.7
PHP 7.2.10

比如我的路线是

Route::middleware('auth', 'emailVerified', 'phoneVerified', 'flatTenant|flatResident|flatMember')->get('apartments/{apartment}/flats/{flat}/guests/{guest}', 'Api\GuestController@show')->name('Api.guests.show');

我希望它像 flatTenant、flatResident 和 flatMember 中的任何一个一样工作,这应该允许请求,实现此目的的最佳方法是什么?

您不需要在路由内进行或操作。相反,您可以进行自己的身份验证,这将检查当前用户是否是 flatTenant、flatResident 和 flatMember 中的任何一个。

例如你可以注册一个名为'flatChecker'的中间件。

然后在那个中间件中你的代码可以是这样的,

public function handle($request, Closure $next)
    {
        if (Auth::user()->isFlatTenant || Auth::user()->isFlatResident || Auth::user()->isFlatMember) //put your own condition to check  here
        {
            return $next($request);
        }

        return redirect('/home'); //if they are not, then redirect them to somewhere else
    }

有关中间件的更多信息,请查看此 documentation