Laravel использует параметр $id метода контроллера ресурсов в качестве параметра промежуточного программного обеспечения

Я пытаюсь создать промежуточное программное обеспечение, чтобы проверить, есть ли у пользователя разрешения, необходимые для просмотра определенных страниц. Ниже код, который я сейчас использую для вызова промежуточного программного обеспечения. Теперь я передаю имя роли, которая должна быть у пользователя, но я также хочу передать требуемый идентификатор, который используется при вызове метода хранилища.

Есть ли способ сделать это, или я должен сделать либо отдельную функцию в этом контроллере, либо переместить промежуточное программное обеспечение проверки маршрута в route.php? Я предпочитаю не перемещать его, потому что это означало бы, что мне придется переопределить все маршруты, которые уже определены моим контроллером ресурсов.

public function __construct()
{
    $this->middleware('permission:Manager',['only' => [
        'show',
    ]]);
}

public function show($id)
{
  //
}

person Stefan    schedule 24.08.2016    source источник


Ответы (1)


Вы можете получить доступ к объекту $request в методе handle вашего промежуточного программного обеспечения, чтобы получить идентификатор запрошенной страницы и пользователя, выполняющего запрос, например:

public function handle($request, Closure $next, $role)
{
    if ( $request->user() && $request->has('id'))
    {
        if ($request->user()->hasRole($request->id, $role)
            return $next($request);
    }        
    return redirect('/403');  // redirect when not allowed
}

Обратите внимание, что метод hasRole и параметр $role — это просто имена-заполнители для вашего собственного метода и параметра.

person Matey    schedule 24.08.2016
comment
Спасибо. Для других людей, которые могут найти это: 'id' не распознается, но я узнал, что вы можете найти их с помощью $request-›route()-›parameters(). Просто замените id любыми именами (в моем случае это имя ресурса). - person Stefan; 01.09.2016