'JWTAuth', 'description' => 'JWT authorization plugin', 'author' => 'ReaZzon, LeMaX10', 'icon' => 'icon-leaf' ]; } /** * Register method, called when the plugin is first registered. * * @return void */ public function register() { $this->checkRequiredPlugins(); $this->app->singleton( UserPluginResolverContract::class, static fn() => UserPluginResolver::instance() ); $this->registerGates(); $this->registerJWT(); } /** * Boot method, called right before the request route. * * @return void */ public function boot() { $this->registerConfigs(); $this->addEventListeners(); } protected function checkRequiredPlugins() { $plugins = ['RainLab.User', 'Lovata.Buddies']; $pluginInstalled = false; foreach ($plugins as $pluginName) { if (PluginManager::instance()->hasPlugin($pluginName)) { $pluginInstalled = true; } } if (!$pluginInstalled) { PluginManager::instance()->disablePlugin('ReaZzon.JWTAuth'); } } /** * */ private function registerConfigs() { $pluginNamespace = str_replace('\\', '.', strtolower(__NAMESPACE__)); $packages = Config::get($pluginNamespace . '::packages'); foreach ($packages as $name => $options) { if (!empty($options['config']) && !empty($options['config_namespace'])) { Config::set($options['config_namespace'], $options['config']); } } } /** * */ private function addEventListeners() { Event::subscribe(UserModelHandler::class); } /** * Регистрация менеджера авторизации. */ private function registerGates(): void { $alias = AliasLoader::getInstance(); $alias->alias('Gate', \Illuminate\Support\Facades\Gate::class); $this->app->singleton(GateContract::class, function ($app): Gate { return new Gate($app, function () use ($app): ?User { return app(UserPluginResolverContract::class)->getProvider()->user(); }); }); } /** * Регистрация JWT. */ private function registerJWT(): void { (new LaravelServiceProvider($this->app))->register(); $this->app->singleton('JWTGuard', static function ($app): Guard { $guard = new JWTGuard( $app['tymon.jwt'], new UserProvider(app(UserPluginResolverContract::class)->getModel()), $app['request'], new \October\Rain\Events\Dispatcher() ); $app->refresh('request', $guard, 'setRequest'); return $guard; }); } public function registerSettings(): array { return [ 'settings' => [ 'label' => 'Buddies Settings', 'description' => 'Manage user based settings.', 'category' => 'JWTAuth', 'icon' => 'icon-cog', 'class' => \ReaZzon\JWTAuth\Models\BuddiesSettings::class, 'order' => 500, 'keywords' => 'buddies users', 'permissions' => ['buddies-menu-*'] ] ]; } }