Kufřík
+Přihlášení do fakturačního systému
+diff --git a/app/Model/Security/Authentificator.php b/app/Model/Security/Authentificator.php index 6a83b00..7298894 100644 --- a/app/Model/Security/Authentificator.php +++ b/app/Model/Security/Authentificator.php @@ -19,31 +19,53 @@ class Authenticator implements IAuthenticator $this->passwords = $passwords; } - public function authenticate(string $user, string $password): SimpleIdentity + /** + * Nette předává přihlašovací údaje jako pole [$email, $password] + */ + public function authenticate(array $credentials): SimpleIdentity { - // 1. Dotaz do centrální Master DB + [$email, $password] = $credentials; + + // 1. Načtení uživatele podle tvého přesného schématu UZIVATEL $row = $this->masterDb->fetch( - 'SELECT ID, EMAIL, HESLO_HASH, JMENO, PRIJMENI, DATABASE_HOST, DATABASE_NAME, DEFAULT_FIRMA_ID + 'SELECT ID, EMAIL, HESLO_HASH, JMENO, PRIJMENI, DATABASE_NAME, CONNECTION_STRING_KEY FROM dbo.UZIVATEL WHERE EMAIL = ? AND AKTIVNI = 1', - $user + $email ); + // $passwords = new Passwords(PASSWORD_BCRYPT, ['cost' => 12]); + // bdump($passwords->hash('admin1234')); + if (!$row || !$this->passwords->verify($password, $row->HESLO_HASH)) { throw new AuthenticationException('Nespravný e-mail nebo heslo.'); } - // 2. Všechny potřebné parametry pro KufrikConnectionFactory zabalíme do Nette Identity + // 2. Aktualizace času posledního přihlášení + $this->masterDb->query( + 'UPDATE dbo.UZIVATEL SET POSLEDNI_PRIHLASENI = SYSDATETIME() WHERE ID = ?', + $row->ID + ); + + // 3. Načtení výchozí FIRMA_ID z vazební tabulky UZIVATEL_FIRMA (pokud existuje) + $firmaRow = $this->masterDb->fetch( + 'SELECT TOP 1 FIRMA_ID FROM dbo.UZIVATEL_FIRMA WHERE UZIVATEL_ID = ?', + $row->ID + ); + + // Fallback: Pokud vazební tabulka ještě není/nepoužívá se, použije se ID uživatele + $firmaId = $firmaRow ? $firmaRow->FIRMA_ID : $row->ID; + + // 4. Předání dat do Nette Identity return new SimpleIdentity( $row->ID, - null, // role (volitelně) + null, // role [ 'email' => $row->EMAIL, - 'jmeno' => $row->JMENO . ' ' . $row->PRIJMENI, - // Kufrik parametry: - 'db_host' => $row->DATABASE_HOST ?? '127.0.0.1', // Umožňuje i RŮZNÉ SERVERY! - 'db_name' => $row->DATABASE_NAME ?? 'Fakturace_MainDB', - 'firma_id' => $row->DEFAULT_FIRMA_ID, + 'jmeno' => trim(($row->JMENO ?? '') . ' ' . ($row->PRIJMENI ?? '')), + 'db_name' => $row->DATABASE_NAME, // Nulllable -> KufrikConnectionFactory použije default_db + 'connection_key' => $row->CONNECTION_STRING_KEY, + 'firma_id' => $firmaId, ] ); } diff --git a/app/UI/@layout.latte b/app/UI/@layout.latte index 0f16b8f..1cd3c2d 100644 --- a/app/UI/@layout.latte +++ b/app/UI/@layout.latte @@ -22,159 +22,171 @@
- - -