2016-11-02 3 views
1

Я пытаюсь использовать промежуточное программное обеспечение на маршруте ресурса.Laravel Controller Middleware для ресурсов

Мой путь -> Route::resource('posts', 'PostController');

Мои Middleware ->

$user = Auth::user(); 

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

Мой контроллер Constructor ->

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

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

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

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

+0

Вы зарегистрировались к промежуточному в ядре? В любом случае см. [Здесь] (https://laravel.com/docs/5.3/middleware#registering-middleware) – Andrew

+0

@Andrew Ya добавляется как '' admin '=> \ App \ Http \ Middleware \ AdminMiddleware :: class, ' –

+0

Для аргументации попробуйте добавить промежуточное ПО по всему миру и посмотреть, попадает ли он на него. Как и для всех ваших маршрутов с группой маршрутов и поместите «die()» или что-то в самой себе и получите доступ к любому маршруту. – Andrew

ответ

0

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

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

Docs

+0

Спасибо! Это работает! Мой маршрут был назван 'posts.destroy', и поэтому я думал, что это сработает. –