IUserStorage::getIdentity() v novém UserStorage
- Honza Kuchař
- Člen | 1662
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
zUser
, 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
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)