Nette User Identity Data změna
- ondraondra81
- Člen | 82
Ahoj
dá se nějak změnit hodnota uložená v
$user->identity->data[‚key‘] ??
Když to zkusím
$user->identity->data[‚key‘] = $key;
vypadne na mě
Indirect modification of overloaded property Nette\Security\Identity::$data has no effect
- Jan Suchánek
- Člen | 404
@matej21: a je rozumné měnit něco v $this->user->identity, je to přepravka na tyto údaje? Nebo je lepší data na odpovídajícím místě vytáhnout a měnit přímo s DB?
- MartinitCZ
- Člen | 580
Doporučuji se $this->user->identity vyhýbat.
Řešení jsou dvě:
- Vytvořit si vlastní Nette\Security\Identity tak, aby data byla vždy aktuální.
- Vždy když potřebuješ použít informace o přihlášeném uživateli, tak si je vytáhneš z DB.
- Jan Suchánek
- Člen | 404
@martinit: Preferuju tu 2ku a data, či změny zobrazovat pomocí komponenty, která si je vytáhne z db pomocí repository (modelu).
- ondraondra81
- Člen | 82
No dvojka zní asi rozumně, ale to znamená pak vždy každému presenteru a
každé akci předat hodnotu v proměnné $this->template->key …
Nebo to jde nějak jinak ?
Každopádně jsem narazil na problém, že i když změna user->identity->key = $key funguje (hodnota se změní), tak se to nepromítne když udělam handle pomocí ajaxu :(
BTW: měním to v tom identity protože předtím to změním v databázi.
- David Matějka
- Moderator | 6445
@ondraondra81:
tak se to nepromítne když udělam handle pomocí ajaxu :(
a invalidoval si tu cast stranky, kde jsou ty data?
jinak tento zpusob ma jeste tu nevyhodu, ze muzes upravovat session jen toho aktualniho uzivatele. Pokud tedy treba jako administrator zmenis nekomu jmeno nebo ho zablokujes, tak mu session nezmenis.
Ja pouzivam vlastni Identitu, ktera uklada do session pouze ID. Mam pak upravene UserStorage, ktere Identitu naloaduje. Inspirace treba tady
- ondraondra81
- Člen | 82
Tak už jsem to vymyslel :)
udělal jsem componentu a v basepresenteru volam jeji vytvoreni
Ale stále mě nefunguje reakce na změnu v ajax operaci
- ondraondra81
- Člen | 82
chjo jak prosté :) místo $this->redrawControl() bylo potřeba $this[‚userInfo‘]->redrawControl
Nicméně děkuji za nakopnutí s komponentou.
Ještě mě prosím řekněte jestli je správné předávat závislosti komponentě pomocí kontruktoru
function __construct($userId, Context $database)
{
$this->database = $database;
$this->userId = $userId;
}
a pak volani v presenteru
public function createComponentUserInfo()
{
return new UserInfo($this->user->getId(), $this->database);
}
nebo se to ma dělat nějak jinak
Editoval ondraondra81 (27. 5. 2014 18:20)
- Jan Suchánek
- Člen | 404
Ja bych tu komponentu vytvořil pomoci továrny v neonu a předával jí rovnou nějakou Fasadu, která by pomáhala v zajišťování dalších operací a přímo by používala k práci User a Repository (ta by dostávala Nette\Database\Context), ale řešení od @matej21 je fikanější.
Edit:
@matej21 Nestačí ověřovat uživatele zda má či nemá BAN jen v checkAutorization? V případě vykopnutí ze systému je potřeba nějakým způsobem uživatele informovat.
Editoval jenicek (28. 5. 2014 11:10)