在我的项目中,我为控制器和路由实现了auth和ACL。我只有在用户登录时才能访问文件上传系统。它工作正常。
我的问题是上传的文件。如果有文件URL,用户可以访问任何文件。如何在上传的文件上实现auth?
我尝试使用路由,但是当通过浏览器访问我的文件时,文件显示为没有拦截此URL的路由。
我用过这段代码:
Route::get('/storage/document/3/4a15c1ab060be8f35.png', function () {
return 'ok';
});
如何在存储上的特定文件夹上实现auth?谢谢!
如果您想根据某种权限限制每个用户访问文件,您需要自己构建该权限逻辑(StackOverflow不会为您完成工作),但为了回答这个问题,让我们假设您已经拥有该权限系统,并且为了检查用户是否具有访问权限,我们的功能是hasAccessToFile
,它基本上只是根据您的业务逻辑需要进行查找。
您可以提供单个文件,而不是公开提供所有文件,这是一个非常简单的示例:
Route::get('files/{pathToFile}', function($pathToFile) {
if (auth()->user()->hasAccessToFile($pathToFile)) {
return response()->file($pathToFile);
} else {
return 'Nope, sorry bro, access denied!';
}
});
请参阅File Responses文档。
如果您需要提供文件的下载而不是提供它们,请执行以下操作:
Route::get('files/{pathToFile}', function($pathToFile) {
if (auth()->user()->hasAccessToFile($pathToFile)) {
return response()->download($pathToFile);
} else {
return 'Nope, sorry bro, access denied!';
}
});
请参阅File Downloads文档。
你可以参考我的答案here。该过程包括创建新的存储磁盘,该文件将文件保存在/storage/app/
(不在公共文件夹中),并在将文件提供给用户之前验证请求。