У меня есть приложение на laravel (5.4)
У каждого пользователя есть папка в / public, куда администратор может загружать (через FTP) некоторые видео для просмотра пользователями. У каждого пользователя разные видео.
Проблема, с которой я столкнулся сейчас, заключается в том, что все в общей папке доступно. Также, если пользователь не авторизован. Как этого избежать?






предположим, что у нас есть 2 пользователя с этими именами:
тогда у вас будет 2 папки:
storage/app/johnstorage/app/sarahТеперь, чтобы получить доступ к файлам Джона, вы должны иметь в своем routes / web.php следующее:
Route::get('/file/{username}/{name}','FilesController@getFile');
затем в FilesController добавьте эту функцию:
public function getFile($username,$name){
if (!Auth::user()){
//user is not logged in
return response(null,403)
}
$auth_user = Auth::user()->username;
if ($username === $auth_user){
//continue with the request
$exists = Storage::disk('local')->exists($username .'/'. $name);
if (!$exists){
// file not found
return response(null,404);
}
$file = Storage::get($username .'/'. $name);
return response($file);
}else{
// the user doesn't have access
}
}
Я не тестировал это, поэтому, если у вас возникнут проблемы, дайте мне знать
Спасибо за решение. Каждый вошедший в систему пользователь может получить доступ к своим видео и не может получить доступ к видео других пользователей. Проблема в том, что когда я меняю URL-адрес на файл mp4, я также вижу его, если никто не вошел в систему. Перемещаю его в папку хранилища, и у меня нет к нему доступа, даже когда я вошел в систему.
вы можете получить доступ к файлам только через эту функцию, прямая ссылка на файл не будет работать, потому что его нет в папке storage/app/public
так как можно передать файлы в тег видео или img в html?
через этот return response()->file(storage_path('app',$username .'/'. $name));
вам нужно сохранить их как частные файлы, затем, когда пользователь нажимает ссылку, вы должны убедиться, что она зарегистрирована и имеет доступ к ссылке