Dvě identity – nastavení namespace?
- Rndoom04
- Člen | 75
Dobrý večer,
prosím o radu, jak docílit toho, že mohu přečíst dvě/více uložených
identit.
Identity tvořím tak, že nastavím namespace a provedu login (různé presentery):
// Admin
$this->admin->getStorage()->setNamespace('backend');
$this->admin->login($identity);
// B2B
$this->b2b_user->getStorage()->setNamespace('b2b');
$this->b2b_user->login($identity);
Když je potom chci přečíst takto (v jednom presenteru – basePresenter):
// B2B
$this->getUser()->getStorage()->setNamespace('b2b');
$this->b2b_user = $this->getUser();
$this->b2b_user_identity = $this->b2b_user->getIdentity();
dump($this->b2b_user_identity);
// Admin
$this->getUser()->getStorage()->setNamespace('backend');
$this->admin = $this->getUser();
$this->adminIdentity = $this->admin->getIdentity();
dump($this->adminIdentity);
dumpně mi to stejnou identitu (B2B) v obou případech. Pokud ale B2B vypnu (zakomentuju), dostanu v adminIdentity tu správnou. Tzn. obě jsou uložené pod různými namespace, ale nedokážu se k nim současně dostat. Už podle kódu vidím, že k tomu přistupuji nesmyslně, ale dokumentace mě nedokázala nasměrovat. Pomohl by mi někdo, prosím? :) Předem moc děkuji.
- Rndoom04
- Člen | 75
Zapomněl jsem dopsat. Dočasné řešení mám přes metody clone(). Ale to asi nebude to správné a čísté řešení.
// B2B
$this->getUser()->getStorage()->setNamespace('b2b');
$this->b2b_user = clone($this->getUser());
$this->b2b_user_identity = $this->b2b_user->getIdentity();
dump($this->b2b_user_identity);
// Admin
$this->getUser()->getStorage()->setNamespace('backend');
$this->admin = clone($this->getUser());
$this->adminIdentity = $this->admin->getIdentity();
dump($this->adminIdentity);
- Marek Znojil
- Člen | 90
Ahoj,
v tomto případě by mělo stačit použít metodu refreshStorage(), protože třída Nette\Security\User není uzpůsobena tak, aby pracovala s více identitami.
// B2B
$this->getUser()->getStorage()->setNamespace('b2b');
$this->b2b_user = $this->getUser();
$this->b2b_user_identity = $this->b2b_user->getIdentity();
dump($this->b2b_user_identity);
$this->getUser()->refreshStorage();
// Admin
$this->getUser()->getStorage()->setNamespace('backend');
$this->admin = $this->getUser();
$this->adminIdentity = $this->admin->getIdentity();
dump($this->adminIdentity);
- Marek Bartoš
- Nette Blogger | 1273
Poděď si pro každý namespace Nette\Security\User a zaregistruj službu. Nebudeš muset řešit, v jakém namespace zrovna jsi a přepínat ho a budeš moci pracovat s oběma přihlášeními současně.