Заблокировать пользователя от другого пользовательского маршрута laravel 5.6

Я создаю приложение, в котором пользователь может загружать изображения. После того, как пользователь нажимает на свое загруженное изображение, laravel перенаправляет его на route / images / {image_id}, где пользователь может получить подробную информацию о своем изображении и, возможно, удалить изображение, если он захочет. Теперь проблема в том, что когда я вручную пишу этот маршрут в браузере с другим идентификатором изображения, принадлежащим другому пользовательскому изображению, я могу открыть его представление с его данными загруженного изображения. Как я могу заблокировать пользователя от этого маршрута, если это изображение ему не принадлежит? Маршрут в web.php:

Route::get('/images/{image_id}', 'ImageController@show');

Это метод в ImageController, который перенаправляет пользователя на просмотр изображения:

    public function show($id){
    $image = Image::findOrFail($id);
    return view('user.show_image', compact('image'));
}

Хороший ли вариант попробовать что-то подобное:

    public function show($id){
    $image = Image::findOrFail($id);
    if (Auth::user()->id != $image->user_id)
    {
        return redirect()->back();
    }
    return view('user.show_image', compact('image'));
}

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

Практическое правило; Если вы собираетесь делать это в своем коде несколько раз, используйте функцию (или в данном случае промежуточное ПО). Таким образом, для одного маршрута вы можете сделать это в связанной функции, но для нескольких маршрутов лучше всего использовать промежуточное программное обеспечение.

Tim Lewis 06.06.2018 19:56

Я думаю, что ваш подход к тому, чтобы поместить его в контроллер, является лучшим в этой ситуации. Вы мог помещаете его в промежуточное ПО, но вам нужно будет сделать дополнительный запрос к базе данных, чтобы получить user_id изображения. Итак, в этом случае я думаю, что ваше решение - лучший подход.

Mark 06.06.2018 20:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
2
426
1

Ответы 1

Используйте политики Laravel https://laravel.com/docs/5.6/authorization#writing-policies

создайте политику для изображения, назовите ее ImagePolicy.php и добавьте этот метод:

public function view(User $user, Image $image) 
{
   return $user->id === $image->user_id
}

в вашем контроллере @show:

$this->authorize('view', $image);

или если вам не нравятся правила:

abort_if ($user->id !== $image->user_id, 404)

Другие вопросы по теме