Nette\Security\Identity – jméno přihlášeného uživatele
- mrfrostikcz
- Člen | 17
Ahoj,
právě jsem řešil situaci, kdy chci vypisovat jméno přihlášeného uživatele v každé podstránce aplikace (@layout.latte). Dopsal jsem si funkce pro získání jména, uložení jména do storage jako se ukládá id a role uživatele. Následně tedy pak přes getUser() tahám i jméno přes novou funkci getName. Vše funguje podle očekávání a v debug baru je parametr rovněž vyditelný:
`Nette\Security\Identity >
contact_name private ⇒ „Karel Novák“`
Rád bych znal váš názor, zda to je relativně vhodné řešení anebo totální kravina. Jsem si vědom, že je to „komplikace“ při aktualizaci Nette, když se bude tento objekt měnit.
Přišlo mi zbytečné to řešit přes model, který by obsahoval jen funkci pro získání jména z MySQL podle ID přihlášeného uživatele anebo ještě jinak, přímo dotaz k db v basePresenteru.
Díky za názor!
Tomáš
- sKopheK
- Člen | 207
Problém v tom nevidím, jen si dej pozor, pokud máš možnost měnit uživatelské jméno, abys to po uložení do db aktualizoval i v session. Občas se mi u Nette stávalo, že data v uživatelské session nebyla k dispozici, takže musím v metodě startup() kontrolovat, jestli tam jsou a jinak znovu natáhnout z db.
- mrfrostikcz
- Člen | 17
Super, díky za informaci i za tip s aktualizací session při změně.
Ještě jednou dík!
- Zax
- Člen | 370
Já bych v tom problém viděl. Nenapsal sis ty funkce natvrdo do Nette, že ne? Do složky s Nette bys neměl nikdy šáhnout a měnit tam, protože můžeš mít třeba víc projektů, které používají Nette. Jesli potřebuješ změnit nějakou třídu, tak si vytvoř jejího potomka (class MyIdentity extends Nette\Security\Identity).
Mimochodem, defaultní Identity v Nette řeší i tvou situaci, třetí parametr při vytváření přijímá pole $data, kam si klidně můžeš dát třeba array(‚contact_name‘ ⇒ $nameVytazenyZDB) a pak k tomu přistupovat přes $user->identity->contact_name
EDIT: A to s tou session je celkem validní připomínka, jenom bych
ještě dodal, že při odhlášení se defaultně session s daty uživatele
nesmaže, je třeba to Nette přikázat uvedením TRUE v metodě logout
$user->logout(TRUE)
Editoval Zax (18. 4. 2014 12:45)