Autentizace a autorizace pomocí oprávnění k databázi

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
IlCommendatore
Člen | 8
+
0
-

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
+
0
-

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
+
0
-

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;
            }
        }

?>