У меня есть REST API в Laravel 5.6
Пользователи могут загружать свой файл в непубличную папку.
Моя проблема в том, что теперь я хочу позволить пользователю загрузить файлтолько если токен JWT действителен и если у пользователя есть необходимые привилегии.
Мой действительный код следующий:
jquery:
$.ajaxSetup({
headers: {
'Authorization': 'Bearer ' + token
});
$.get('/api//download?' + $.param({
file: encodeURIComponent(fileNonPublicPath) //e.g. company_id/file.pdf
}))
.done((data) => {
console.log('file content', data);
})
.fail((err) => {
console.error(err);
});
Контроллер Laravel:
$file = urldecode($request->input('file'));
$user = JWTAuth::toUser($request->token);
if(checkUserRole($user,$file){
$pathToFile = Storage::disk('documents')->getDriver()->getAdapter()->applyPathPrefix($file);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $pathToFile);
finfo_close($finfo);
$headers = array('Content-Type' => $mime,);
return response()->download($pathToFile, 'originalfilename', $headers);
}
return response()->json([], 403); //forbidden
Этот код работает нормально, за исключением того, что браузер получает содержимое файла в ajax, а затем пользователь не может его загрузить.
Какое решение не ставит под угрозу безопасность хранимогофайлы