Промежуточное ПО Laravel Controller для ресурсов

Я пытаюсь использовать промежуточное ПО на маршруте ресурсов.

Мой маршрут -> Route::resource('posts', 'PostController');

Мое промежуточное ПО ->

$user = Auth::user();

    if(Auth::check()) {
        if($user->is_admin) {
           return $next($request);
        } else {
            return redirect()->route('home');
        } 
    } else {
        return redirect()->route('login');
    }

Конструктор моего контроллера ->

$this->middleware('auth'); $this->middleware('admin')->only('posts.destroy');

Моя цель - позволить только администраторам уничтожить пост, а не другим.

Но когда я использую php artisan route:list, показанное промежуточное ПО — это web, auth.

Что я здесь делаю неправильно?


person Faraz Ali    schedule 02.11.2016    source источник
comment
Вы зарегистрировали промежуточное ПО в ядре? В любом случае см. здесь   -  person Andrei    schedule 02.11.2016
comment
@Andrew Я добавлен как 'admin' => \App\Http\Middleware\AdminMiddleware::class,   -  person Faraz Ali    schedule 02.11.2016
comment
Ради аргумента попробуйте добавить промежуточное ПО глобально и посмотрите, сработает ли оно. Например, оберните все ваши маршруты группой маршрутов и поместите die() или что-то в самом промежуточном программном обеспечении и получите доступ к любому маршруту.   -  person Andrei    schedule 02.11.2016
comment
@Andrew Эндрю Если я добавлю только $this->middleware('admin');, он будет отображаться под php artisan route:list, но я хочу, чтобы он применялся только к определенным маршрутам. Любое решение?   -  person Faraz Ali    schedule 02.11.2016
comment
Мы можем что-нибудь придумать, просто хотел убедиться, что это работает.   -  person Andrei    schedule 02.11.2016
comment
Ох, ладно! Кстати, я новичок в Laravel, поэтому шаги, которые я предпринял, правильные или неправильные?   -  person Faraz Ali    schedule 02.11.2016
comment
Шаги, которые вы предприняли, очень правильные. Я немного увлекся вещами, но скоро вернусь с ответом.   -  person Andrei    schedule 02.11.2016
comment
@Андрей спасибо! Ответ Амита сработал! ('destroy') работает вместо ('posts.destroy')   -  person Faraz Ali    schedule 02.11.2016


Ответы (1)


Вы можете попробовать это как:

$this->middleware('admin')->only('destroy');

Документы

person Amit Gupta    schedule 02.11.2016
comment
Спасибо! Это работает! Мой маршрут назывался posts.destroy, и я подумал, что это сработает. - person Faraz Ali; 02.11.2016