@Quavo

Как правильно передать параметр в middleware laravel?

Здравствуйте, опишу задачу: в приложении есть некоторый ресурс, скажем Document, у этого ресурса есть определенные уровни доступа, 0 - для всех, 1 - только для тех пользователей, которые добавлены в участники этого ресурса.
Изначально код выглядел следующим образом:
public function show(Document $document)
{
     if(!$document->userHasAccess(auth()->user())
     {
          return permissionDenied();
     }
     return $document
}

Но проверок на наличие доступа стало слишком много, и я принял решения отрефакторить эту логику. Я создал middleware посредник "DocumentAccess"
Он выглядит следующим образом:
class DocumentAccess
    {
       public function handle($request, Closure $next, Document $document)
       {
            if(!$document->userHasAccess($request->user()))
            {
                return response()->json(['error' => 'Permission denied'], 403);
            }

            return $next($request);
        }
    }

Как мне передать в него Document модель?

Роут выглядит так:
Route::get('documents/{document}', 'DocumentController@show')->middleware('access');
  • Вопрос задан
  • 326 просмотров
Решения вопроса 1
@jazzus
Вместо userHasAccess уже есть метод can. Т.е. в этом велосипеде нет необходимости. В моделях и так куча всего, чтобы нагружать их еще своими методами авторизации. Для таких целей в Ларавел есть политики. Не нужно доставать модели в мидлваре. Вызывается одной строчкой кода в контроллере и автоматом возвращает 403.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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