Контроль доступа к изображениям в веб-интерфейсе

В моем веб-приложении Symfony 3 есть пользовательский элемент управления входом, управляемый FOSUserBundle.
Я хорошо проверяю состояние входа в систему на стороне сервера, контролируя все необходимые действия, которые пользователь может или не может делать.

Теперь пользователь может загружать изображения.
Существует представление, которое показывает пользователю все его изображения. Чтобы предоставить веб-интерфейсу необходимые img-pathes для этого представления пользовательской галереи, я передаю все пути для изображений этих пользователей во внешний интерфейс и затем показываю его там.

Вот где я запутался:
Как ограничить доступ к этим img-pathes только для соответствующего (вошедшего в систему) пользователя и запретить его всем остальным?
Или: как я могу предоставить изображения для веб-интерфейса, не используя img-путь, доступный для всех?
Есть ли способ сделать это с помощью функциональности Symfony / FOSUserBundle?

-1

Решение

для этого вам понадобится ACL (Access Control List). Одним из решений является использование таблицы с imageID и Allowed userID, чтобы вы могли проверить заданное изображение и получить доступ к разрешенным пользователям из этой таблицы / сущности и указать путь к изображению для этих пользователей. Далее убедитесь, что вы используете правильные отношения к образ, image_user а также пользователь юридические лица.

Как ограничить доступ к этим img-pathes только для соответствующего (вошедшего в систему) пользователя и запретить его всем остальным?

Как предоставить изображения веб-интерфейсу без использования img-path, доступного для всех?

для двух из вышеперечисленных, в вашем контроллере, проверьте разрешенные изображения для вошедшего в систему пользователя в image_user и получить пути к изображениям для этого конкретного пользователя и передать их в представление / Twing (вы можете использовать массив для этого)

0

Другие решения

Это работает для меня:

Оставьте все как есть, но вызовите php-скрипт, чтобы получить изображения, а не загружать изображение напрямую.
Поэтому я изменил только атрибут «src» в теге img, чтобы вызвать скрипт и передать img-name в качестве GET-параметра, в общем случае это:

<img src="[server]/image.php?img=xy.jpg">

Результирующий маршрут в Symfony, очевидно, немного отличается, например:

<img src="[server]/my/img/loading/route/xy.jpg">

В контроллере, обрабатывающем запрос, проверяются требуемые права доступа для запрошенного изображения и готовится ответ:

$response = new Response();
$response->setContent( file_get_contents($imgPath) );
$response->setStatusCode( Response::HTTP_OK );
$response->headers->set( 'Content-type', $mimeType );
$response->headers->set( 'Content-length', filesize($imgPath) );

Возвращение этого ответа от соответствующего метода действия контроллера теперь работает нормально.

0

По вопросам рекламы [email protected]