public function loadConfiguration()
{
$config = $this->validateConfig($this->defaults);
$builder = $this->getContainerBuilder();
$builder->addDefinition($this->prefix('userStorage'))->setClass(Nette\Security\IUserStorage::class)->setFactory(Nette\Http\UserStorage::class);
$user = $builder->addDefinition($this->prefix('user'))->setClass(Nette\Security\User::class);
if ($this->debugMode && $config['debugger']) {
$user->addSetup('@Tracy\\Bar::addPanel', [new Nette\DI\Statement(Nette\Bridges\SecurityTracy\UserPanel::class)]);
}
if ($config['users']) {
$usersList = $usersRoles = [];
foreach ($config['users'] as $username => $data) {
$data = is_array($data) ? $data : ['password' => $data];
$this->validateConfig(['password' => NULL, 'roles' => NULL], $data, $this->prefix("security.users.{$username}"));
$usersList[$username] = $data['password'];
$usersRoles[$username] = isset($data['roles']) ? $data['roles'] : NULL;
}
$builder->addDefinition($this->prefix('authenticator'))->setClass(Nette\Security\IAuthenticator::class)->setFactory(Nette\Security\SimpleAuthenticator::class, [$usersList, $usersRoles]);
if ($this->name === 'security') {
$builder->addAlias('nette.authenticator', $this->prefix('authenticator'));
}
}
if ($config['roles'] || $config['resources']) {
$authorizator = $builder->addDefinition($this->prefix('authorizator'))->setClass(Nette\Security\IAuthorizator::class)->setFactory(Nette\Security\Permission::class);
foreach ($config['roles'] as $role => $parents) {
$authorizator->addSetup('addRole', [$role, $parents]);
}
foreach ($config['resources'] as $resource => $parents) {
$authorizator->addSetup('addResource', [$resource, $parents]);
}
if ($this->name === 'security') {
$builder->addAlias('nette.authorizator', $this->prefix('authorizator'));
}
}
if ($this->name === 'security') {
$builder->addAlias('user', $this->prefix('user'));
$builder->addAlias('nette.userStorage', $this->prefix('userStorage'));
}
}