如何在Laravel中对中间件进行OR操作

时间:2019-02-13 09:40:50

标签: laravel laravel-routing laravel-middleware

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一样工作,这应该允许请求,实现此目的的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您无需在路线内进行制作或操作。相反,您可以进行自己的身份验证,该身份验证将检查当前用户是否为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