gpt4 book ai didi

php - 如何保护 Laravel 存储文件夹

转载 作者:行者123 更新时间:2023-12-04 12:13:34 25 4
gpt4 key购买 nike

在我的项目中,我为我的 Controller 和路由实现了 auth 和 ACL。我有一个文件上传系统,只有在用户登录时才能访问。它工作正常。

我的问题出在上传的文件上。如果有文件 URL,用户可以访问任何文件。如何对上传的文件实现身份验证?

我尝试使用路由,但是当通过浏览器访问我的文件时,文件显示为好像没有拦截此 URL 的路由。

我用过这个代码:

Route::get('/storage/document/3/4a15c1ab060be8f35.png', function () {
return 'ok';
});

如何对存储上的特定文件夹实现身份验证?谢谢!

最佳答案

如果您想根据某种权限限制每个用户对文件的访问,您需要自己构建该权限逻辑(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文档。

关于php - 如何保护 Laravel 存储文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53239589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com