Заблокировать пользователя от другого пользователя по маршруту laravel 5.6 - PullRequest
0 голосов
/ 06 июня 2018

Я создаю приложение, в которое пользователь может загружать изображения.После того, как пользователь нажимает на свое загруженное изображение, laravel перенаправляет его на маршрут / 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'));
}

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

1 Ответ

0 голосов
/ 06 июня 2018

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

создайте политику для Image, назовите ее 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)
...