masterDb = $masterDb; $this->passwords = $passwords; } /** * Nette předává přihlašovací údaje jako pole [$email, $password] */ public function authenticate(array $credentials): SimpleIdentity { [$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, [DATABASE], [SERVER], FIRMA_ID FROM dbo.LOGIN WHERE EMAIL = ? AND AKTIVNI = 1', $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. Aktualizace času posledního přihlášení $this->masterDb->query( 'UPDATE dbo.LOGIN 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 [ 'email' => $row->EMAIL, 'database' => $row->DATABASE, // Nulllable -> KufrikConnectionFactory použije default_db 'server' => $row->SERVER, 'firma_id' => (int) $row->FIRMA_ID, // Zpřístupní $user->identity->firma_id ] ); } }