94 lines
2.4 KiB
PHP
94 lines
2.4 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace Illuminate\Auth;
|
||
|
|
|
||
|
|
use InvalidArgumentException;
|
||
|
|
|
||
|
|
trait CreatesUserProviders
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* The registered custom provider creators.
|
||
|
|
*
|
||
|
|
* @var array
|
||
|
|
*/
|
||
|
|
protected $customProviderCreators = [];
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Create the user provider implementation for the driver.
|
||
|
|
*
|
||
|
|
* @param string|null $provider
|
||
|
|
* @return \Illuminate\Contracts\Auth\UserProvider|null
|
||
|
|
*
|
||
|
|
* @throws \InvalidArgumentException
|
||
|
|
*/
|
||
|
|
public function createUserProvider($provider = null)
|
||
|
|
{
|
||
|
|
if (is_null($config = $this->getProviderConfiguration($provider))) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (isset($this->customProviderCreators[$driver = ($config['driver'] ?? null)])) {
|
||
|
|
return call_user_func(
|
||
|
|
$this->customProviderCreators[$driver], $this->app, $config
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
return match ($driver) {
|
||
|
|
'database' => $this->createDatabaseProvider($config),
|
||
|
|
'eloquent' => $this->createEloquentProvider($config),
|
||
|
|
default => throw new InvalidArgumentException(
|
||
|
|
"Authentication user provider [{$driver}] is not defined."
|
||
|
|
),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get the user provider configuration.
|
||
|
|
*
|
||
|
|
* @param string|null $provider
|
||
|
|
* @return array|null
|
||
|
|
*/
|
||
|
|
protected function getProviderConfiguration($provider)
|
||
|
|
{
|
||
|
|
if ($provider = $provider ?: $this->getDefaultUserProvider()) {
|
||
|
|
return $this->app['config']['auth.providers.'.$provider];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Create an instance of the database user provider.
|
||
|
|
*
|
||
|
|
* @param array $config
|
||
|
|
* @return \Illuminate\Auth\DatabaseUserProvider
|
||
|
|
*/
|
||
|
|
protected function createDatabaseProvider($config)
|
||
|
|
{
|
||
|
|
return new DatabaseUserProvider(
|
||
|
|
$this->app['db']->connection($config['connection'] ?? null),
|
||
|
|
$this->app['hash'],
|
||
|
|
$config['table'],
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Create an instance of the Eloquent user provider.
|
||
|
|
*
|
||
|
|
* @param array $config
|
||
|
|
* @return \Illuminate\Auth\EloquentUserProvider
|
||
|
|
*/
|
||
|
|
protected function createEloquentProvider($config)
|
||
|
|
{
|
||
|
|
return new EloquentUserProvider($this->app['hash'], $config['model']);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get the default user provider name.
|
||
|
|
*
|
||
|
|
* @return string
|
||
|
|
*/
|
||
|
|
public function getDefaultUserProvider()
|
||
|
|
{
|
||
|
|
return $this->app['config']['auth.defaults.provider'];
|
||
|
|
}
|
||
|
|
}
|