如何保护Laravel Storage文件夹

时间:2018-11-10 13:43:56

标签: php laravel authentication storage acl

在我的项目中,我已经为控制器和路由实现了auth和ACL。我只有在登录用户后才能访问文件上传系统。很好。

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

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

我使用了以下代码:

android.permission.ACCESS_FINE_LOCATION

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

您可以参考我的答案here。该过程包括创建一个新的存储磁盘,将文件保存在<script src="assets/plugins/jquery.min.js" type="text/javascript"></script> 上(不在公共文件夹中),并在将文件提供给用户之前验证请求。