@energimass

Почему не работает метод объявленный в конструкторе?

Почему вот так метод denies фасада gate срабатывает:
public function __construct()
    {
        $this->middleware('auth');
    }

    public function index(){
        if(Gate::denies('VIEW_ADMIN')){
            return redirect('myprofile');
        }
        $array = array(
        'title'=>'Админ панель. Главная.',
        'user'=>$this->getCurUser(),
        );
        if(view()->exists('pages.admin.index.index-content')){
            return view('pages.admin.index.index-content', $array);
        }
        abort(404);
    }


А если объявить его в конструкторе(я хочу чтоб проверка проходила для всех методов), метод denies не срабатывает.

public function __construct()
    {
        $this->middleware('auth');
        if(Gate::denies('VIEW_ADMIN')){
            return redirect('myprofile');
        }
    }

    public function index(){
        $array = array(
        'title'=>'Админ панель. Главная.',
        'user'=>$this->getCurUser(),
        );
        if(view()->exists('pages.admin.index.index-content')){
            return view('pages.admin.index.index-content', $array);
        }
        abort(404);
    }

Что нужно добавить или удалить? Буду благодарен если кто нибудь объяснит. А то сам как то не допираю.
  • Вопрос задан
  • 348 просмотров
Решения вопроса 1
надо обернуть код в middleware
public function __construct()
{
    $this->middleware('auth');
    $this->middleware(function ($request, $next) {
        if(Gate::denies('VIEW_ADMIN')){
            return redirect('myprofile');
        }
        return $next($request);
    });
}

Подробнее https://laravel.com/docs/5.3/upgrade#5.3-session-i...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы