Dvě identity – nastavení namespace?

Rndoom04
Člen | 72
+
0
-

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 | 72
+
0
-

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 | 77
+
+1
-

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 | 1175
+
+3
-

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ě.