在laravel中用户autenticaton之后我可以在哪里动态更改配置?

时间:2016-11-15 10:40:28

标签: php laravel elfinder

我正在使用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');
        }
    }

如您所见,如果没有与用户名相同的目录,则会创建。

但我想知道我在中间件中执行此操作或者还有其他(或适当的)位置是正确的吗?

2 个答案:

答案 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"]);
        }
    }