我正在使用elfinder laravel包来管理和整理文件。
它有elfinder.dir
个配置选项,用于指定用户可以向其上传文件的目录。
现在我想将此选项更改(或创建)到与用户username
中记录的名称相同的目录。
为此,我在用户身份验证后运行的中间件中编写了一些代码,以限制用户访问管理面板。像这样:
class IsAdmin
{
public function handle ($request, Closure $next)
{
if (Auth::check()) {
$username = Auth::user()->username;
if (!File::exists(public_path('upload') . '/' . $username)) {
File::makeDirectory(public_path('upload') . '/' . $username, 0775);
}
Config::set('elfinder.dir', ["upload/$username"]);
return $next($request);
}
return Redirect::to('/admin/login');
}
}
如您所见,如果没有与用户名相同的目录,则会创建。
但我想知道我在中间件中执行此操作或者还有其他(或适当的)位置是正确的吗?
答案 0 :(得分:1)
我不知道你使用的laravel版本,但在我看来,这是你应该做的事情。
您可以收听登录事件并在其中执行操作。
答案 1 :(得分:1)
根据@ yannis-berrouag的答案和l5.3文档中的authentication events我这样做。
首先我将其添加到EventServiceProvider.php
:
'Illuminate\Auth\Events\Authenticated' => [
'App\Listeners\SetElfinderConfigs',
],
然后我向SetElfinderConfigs
听众添加了我想要的动作:
class SetElfinderConfigs
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct ()
{
//
}
/**
* Handle the event.
*
* @param Authenticated $event
*
* @return void
*/
public function handle (Authenticated $event)
{
$username = $event->user->username;
if (!File::exists(public_path('upload') . '/' . $username)) {
File::makeDirectory(public_path('upload') . '/' . $username, 0775);
}
Config::set('elfinder.dir', ["upload/$username"]);
}
}