Задача состоит в том, чтобы скрыть документы пользователя из публичного доступа, их может просматривать только пользователь какой загрузил эти файлы. Не знаю какой вариант лучше и есть ли смысл выносить файлы из папки web. Как лучше это реализовать?
Вариант А. Менее гибкий
Выносим файлы, закрытые от просмотра, в отдельную папку внутри web,
например protected_uploads.
Устанавливаем куки для конкретного пользователя на просмотр файла. Например: файл называется my_file_325835628.png, для нужного нам
пользователя ставим куки my_file_325835628=true, если добавляются
еще файлы, добавляем новый куки, если удаляем разрешение, то ставим
false или просто удаляем куки В htaccess для папки
protected_uploads прописываем правила типа таких (на корректность правил не претендую):RewriteCond %{REQUEST_URI} ^(.+)\.png [NC]
RewriteCond %{HTTP_COOKIE} !$1=true [NC]
RewriteRule \.(png)$ - [NC,F,L]
Вариант Б. Более гибкий
webFilesAccessВ контроллере ставим экшн для отображения файлов:
// на корректность кода так же не претендую, наверняка в Yii предусмотрены более продуманные варианты отображения изображений, нужно читать документацию
public function actionShowFile() {
$fileName = Yii::$app->request->get("file_name");
$allowed = FilesAccess::isAllowed($fileName); // Этот метод проверяет в табилце `files_access` доступен ли файл для доступа данному пользователю
if ( $allowed ) {
$response = Yii::$app->getResponse();
$response->headers->set('Content-Type', 'image/png');
$response->format = Response::FORMAT_RAW;
$response->stream = fopen("серверный/путь/до/нужной/папки" . $fileName, 'r');
return $response->send();
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей