IUserStorage::getIdentity() v novém UserStorage

dakur
Člen | 493
+
0
-

Je opravdu jediná možnost UserStorage::getState()[1]? To není moc type-checkable… Nebo jsem něco přehlíd? Díky.

Editoval dakur (7. 1. 2021 17:38)

David Grudl
Nette Core | 8228
+
0
-

Ty nějak používáš přímo UserStorage?

Honza Kuchař
Člen | 1662
+
+1
-

Ahoj Davide, ahoj @dakur,
používáme UserStorage to k informování modelu aplikace o aktuálně přihlášeném uživateli. Tedy k předání identity. Model používá vlastní obdobu User, říkáme tomu IdentityProvider – ten identitu někde potřebuje vzít. Protože na frontnedu máme Nette, napojili jsme se na UserStorage. Hlavní důvod, byl, že mi přišlo zbytečné si přitáhnout celý „klavír“ – User.

Řešení vidím dvě, obě v pohodě schůdné:

  • vytáhnout Identity z User, který Identity poskytuje též.
  • Zároveň koukám, že UserStorage vrací ArrayShape, typ tedy v pohodně zkontroluje phpstan a není problém nechat současný návrh

Pro představu přikládám (původní) kód indentity provideru:

final class UserStorageIdentityProvider implements IdentityProvider
{

	/** @var IUserStorage */
	private $userStorage;


	public function __construct(IUserStorage $userStorage)
	{
		$this->userStorage = $userStorage;
	}


	// this method is called from model and recieves Identity under interface which model requires.
	public function getIdentity(): ?AccountIdentity
	{
		$identity = $this->userStorage->getIdentity();
		if ($identity === NULL) return NULL;
		\assert($identity instanceof ApplicationIdentity);
		return $identity->getModelIdentity(); // This basically converts Nette identity, to model identity
	}

}

Editoval Honza Kuchař (8. 1. 2021 9:41)

dakur
Člen | 493
+
0
-

Ty nějak používáš přímo UserStorage?

@DavidGrudl Ano, krom výše zmíněného taky proto, že pokud chceš používat Nette\Security\User, ale nechceš používat Nette\Security\Authenticator, tak nemůžeš použít ani Nette\Security\IdentityHandler. Takže pak musíš pracovat s UserStorage. Sepisoval jsem to zde: https://github.com/…ty/issues/64

Nakonec jsme teda ale od Nette\Security\User upustili úplně, dělal toho příliš mnoho s příliš malou flexibilitou.

Editoval dakur (29. 9. 2022 17:17)