Laravel – Как ИЛИ среди промежуточных программ для маршрута?

На моем веб-сайте есть таблица users, и пользователю разрешено обновлять пользователя, если он является администратором или его/ее учетной записью. Я могу поместить это правило в промежуточное ПО и наложить его на маршрут, но я хочу создать отдельные промежуточные ПО и OR среди них. Могу ли я сделать это?

Следующий код

Route::group(['middleware' => ['admin','Owner']],
    function () {
        Route::resource('roles', 'RoleController');
        Route::resource('locations', 'LocationController');
        Route::resource('recipients', 'RecipientController');
        Route::resource('classifications', 'ClassificationController');
    });

имеет AND поведение. Я думаю, что это можно сделать, используя некоторый оператор if ... else ... внутри web.php или UserController, но мне нужно знать, есть ли другой выход.

заранее спасибо


Обновить

Вот промежуточное ПО владельца

class OwnerMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $id)
    {
        if(Auth::guest())
            return abort(403, 'Access Denied');
        if(Auth::user()->id != $id)
            return abort(403, 'Access Denied');
        return $next($request);
    }
}

Затем я передаю ему параметр $id.


person M a m a D    schedule 06.08.2018    source источник
comment
Можем ли мы увидеть ваш промежуточный код владельца?   -  person aceraven777    schedule 06.08.2018
comment
Надеюсь, это поможет вам stackoverflow.com/questions/39344836/   -  person aceraven777    schedule 06.08.2018
comment
@aceraven777 я обновляю код   -  person M a m a D    schedule 06.08.2018


Ответы (1)


На самом деле нет «ИЛИ» для промежуточного программного обеспечения. Оно либо действует, либо проходит. Вы должны расширить текущее промежуточное ПО, чтобы проверить право собственности или разрешение на редактирование.

Однако для решения этой проблемы я бы рекомендовал использовать политику с промежуточным программным обеспечением: См.: https://laravel.com/docs/master/authorization#via-middleware

person Jason Grim    schedule 06.08.2018