Cai*_*aki 6 php laravel laravel-5.5
在我的应用程序内部,存在一个名为的路由组admin,该组内的任何路由都会调用两个资源:public/css/admin.css并且public/js/admin.js,但是任何未经身份验证的用户都可以访问这些文件.如何在Auth Middleware中包含这些文件?
我的管理路线:
Route::group(['prefix' => 'admin', 'middleware' => ['auth']], function () {
Route::get('/', 'Admin\IndexController@index')->name('panel');
Route::group(['prefix' => 'users'], function() {});
Route::group(['prefix' => 'settings'], function() {});
Route::fallback('Admin\ExceptionController@exception');
});
Run Code Online (Sandbox Code Playgroud)
我的资源链接:
http://localhost:3000/css/admin.css
http://localhost:3000/js/admin.js
Run Code Online (Sandbox Code Playgroud)
我的资源链接应该是:
http://localhost:3000/admin/css/admin.css
http://localhost:3000/admin/js/admin.js
Run Code Online (Sandbox Code Playgroud)
如果我只需要创建一个文件夹admin里面public的文件夹我刚刚得到一个403错误...
我能做些什么呢?
我想你正在使用它,因为你不希望未经身份验证的用户知道这些css/js文件的内容.您的css/js文件中不应包含任何敏感信息,因此服务它们没有问题.
否则,如果要限制对文件的访问,则应通过PHP下载文件.例如,您可以将文件放在公共文件夹之外,并通过获取文件内容并供下载的方法使其可以条件下载.
您应该可以创建该公共管理文件夹,检查文件权限和文件所有权.
更新:现在我们将使用存储而不是公共目录。
虽然我同意您的 css/js 文件中不应包含任何敏感信息,但如果您确实想将文件提供给经过身份验证的用户,您可以通过此解决方案来实现。
注意:我已在 git 上公开提供该项目,因此您可以根据需要从那里克隆。Git 仓库
755基本思想:
执行:
admin_assets目录的目录。755.CommonHelper,并编写函数来提供和删除管理资产。<link href="{{ asset( CommonHelper::serveAdminAssets('app.css', '/css/') ) }}" rel="stylesheet">
最后,只要用户登录,文件就可供他/她使用,一旦用户注销,所有文件将从文件夹中删除。
通用助手类:
<?php
/**
*
*/
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
class CommonHelper {
public static function serveAdminAssets($fileName, $filePath) {
if( Auth::check() ) {
$adminAssetsBasePath = public_path().'/admin_assets';
$source = $adminAssetsBasePath.$filePath.$fileName;
$destDir = 'public/'.Auth::user()->id.$filePath;
$dest = $destDir.$fileName;
Storage::put($dest, file_get_contents($source));
return Storage::url($dest);
} else {
return '';
}
}
public static function removeAdminAssets($id) {
$destDir = storage_path('app/public/'.Auth::user()->id);
File::cleanDirectory($destDir);
File::deleteDirectory($destDir);
}
}
?>
Run Code Online (Sandbox Code Playgroud)
笔记:
请记住,如果您使用本地驱动程序,则所有应可公开访问的文件都应放置在 storage/app/public 目录中。此外,您应该在 public/storage 处创建一个指向 storage/app/public 目录的符号链接。文档
在删除目录之前,您应该先清空它。
| 归档时间: |
|
| 查看次数: |
1225 次 |
| 最近记录: |