Laravel5.4中unisharp/laravel-filemanager多认证配置问题
解决Laravel 5.4 + unisharp/laravel-filemanager 多角色访问文件管理的问题
这个问题我之前也碰到过,核心原因是你对Laravel中间件的执行逻辑理解有点偏差——当你在中间件数组里同时放auth:client和auth:manager时,Laravel会要求用户同时通过这两个guard的认证,这显然不是你要的「二选一」效果。下面给你一套可行的解决方案:
步骤1:创建自定义中间件
我们需要写一个中间件,用来判断用户是client或manager角色中的任意一个,只要满足其一就放行。
首先执行Artisan命令生成中间件:
php artisan make:middleware CheckFileManagerAccess
打开生成的app/Http/Middleware/CheckFileManagerAccess.php,替换成以下代码:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class CheckFileManagerAccess { public function handle($request, Closure $next) { // 检查用户是否已通过client或manager guard登录 if (Auth::guard('client')->check() || Auth::guard('manager')->check()) { return $next($request); } // 若都不满足,返回403无权限 abort(403, '你没有权限访问文件管理功能'); } }
步骤2:注册自定义中间件
打开app/Http/Kernel.php,在$routeMiddleware数组中添加我们的中间件别名:
protected $routeMiddleware = [ // ... 其他中间件 'filemanager.access' => \App\Http\Middleware\CheckFileManagerAccess::class, ];
步骤3:修改laravel-filemanager的配置
打开config/flm.php,找到middlewares配置项,替换成我们自定义的中间件:
'middlewares' => ['web', 'filemanager.access'],
额外检查事项
确保你在config/auth.php中已经正确配置了client和manager的guard及对应的provider,比如:
'guards' => [ // ... 其他guard 'client' => [ 'driver' => 'session', 'provider' => 'clients', ], 'manager' => [ 'driver' => 'session', 'provider' => 'managers', ], ], 'providers' => [ // ... 其他provider 'clients' => [ 'driver' => 'eloquent', 'model' => App\Client::class, ], 'managers' => [ 'driver' => 'eloquent', 'model' => App\Manager::class, ], ],
这样配置后,client和manager角色的用户就能正常访问文件上传功能,而其他角色(比如member、reseller)会被拦截。
内容的提问来源于stack exchange,提问作者Saiful OCG MY
相关产品推荐
相关产品推荐

