Autentizace a autorizace pomocí oprávnění k databázi
- IlCommendatore
- Člen | 8
Ahoj, rád bych poprosil o rady s následujícím zadáním:
Zadání: aplikace v Nette má pro autentizaci používat stejný login jako do ostatních aplikací ve firmě.
Co to v praxi znamená: do ostatních modulů MISu se uživatelé přihlašují dle předdefinovaných účtů na Oracle, tj. mohu-li se přihlásit k databázi a provádět tam nějakou operaci, můžu se se stejným oprávněním přihlásit do MISu.
Návrh řešení: napadlo mě při loginu vytvořit novou Dibi::connection($name, $password); a tuto nějak předat do containeru. Otázka ale zní jak – musím si během toho vytvořit nový Configurator?
Děkuji
- Šaman
- Člen | 2640
Ne. Chápu to tak, že problém je ve dvou připojeních k db?
Pak to připojení k Oracle si pojmenuj, nastav tomu autowire: no
a službám, které toto připojení budou potřebovat ho předej jako parametr.
Všude jinde se bude automaticky předávat to hlavní connection.
Aha, ty teprve při odeslání loginFormu znáš přihlasovací údaje k té
Oracle? Tak bych to neukládal do Configuratoru, ale jen ty přihlašovací
údaje bych si uložil v identitě do session a ve startup()
metodě presenteru bych si vytvářel to připojení, které pak ručně
předáš autorizátoru. Autentikátor si ho vytvoří sám.
- IlCommendatore
- Člen | 8
Přesně tak. Přihlašovací údaje, tj jméno a heslo si zadává uživatel sám. Vyřešil jsem následovně (viz níže), je to moc prasecké??? (nicméně funguje to)
<?php
/*SIGN presenter*/
public function signInTrainsFormSucceeded($form) {
$values = $form->getValues();
$bak = $config = $this->context->dibi->connection->getConfig();
$config['username'] = $values->user;
$config['password'] = $values->password;
try {
$this->context->dibi->connection->setConfig($config);
$this->context->dibi->connection->connect();
$this->getUser()->setExpiration('2 days', TRUE);
echo 'Success';
try {
$this->getUser()->login($values);
$this->redirect('Trains:');
} catch (Nette\Security\AuthenticationException $e) {
$form->addError($e->getMessage());
}
} catch (DibiDriverException $ex) {
$form->addError('Neplatné přihlašovací údaje');
}
}
?>
<?php
/* DibiConnection */
public final function setConfig($config, $key = NULL) {
if ($key === NULL) {
$this->config = $config;
}
else {
$this->config[$key] = $config;
}
}
?>