Sandbox: konfigurace UserManageru v configu
- mates
- Člen | 36
Proč je v Sandboxu v config.neon nastaven UserManager pouze jako servisa a
ne jako authentikator?
Výsledkem je, že se vůbec nepoužije metoda UserManager.Authenticate.
Nemělo by tam tedy být místo
services:
- App\Model\UserManager
toto
services:
authentikator: App\Model\UserManager
- Šaman
- Člen | 2666
Velmi doporučuji tuto funkcionalitu oddělit a mít samostatně UserManager (UserDao, UserRepository, …) a vedle toho Authenticator, který ten UserManager dostane konstruktorem. Každá třída si pak ručí za svoje (single responsibility principle) a ten UserManager (já dávám přednost UserRepository a pro případnou vyšší logiku UserService) bude stejný, jako další managery ostatních entit. A pokud budeš chtít vyměnit authenticator, tak si vytvoříš nový a jen přepíšeš definici v configu.
- Šaman
- Člen | 2666
Na tohle má asi každý maličko jiný názor. Ale jinak teď jsem na aktuální Sandbox koukal a ta metoda tam zbytečná není. Fígl je v tom, že UserManager implementuje rozhraní IAuthenticator a třída User si ho podle toho rozhraní vyžádá. Proto není potřeba authenticator v configu pojmenovávat.
- mates
- Člen | 36
Měl jsem tam bardump s výpisem obsahu sloupce role a dokud jsem to neměl zaregistrovane jako autentizator. Tak jsem ten bardump nevyvolal. Teď jsem si to prošel ještě jednou a samozřejmě to funguje jak píšeš, vyvolá se. :)
Chtěl jsem docílit toho aby sloupec role mohl obsahovat nejen jednu roli, proto jsem změnil sloupec role v db na set(„role1“,„role2“,„role3“) a autentizator potom dokončil takto
$roles = $row[self::COLUMN_ROLE];
$arrayOfRoles = explode(',', $roles);
\Tracy\Debugger::barDump($arrayOfRoles,'vola se');
return new Nette\Security\Identity($row[self::COLUMN_ID], $arrayOfRoles, $arr);
Bohužel nevím jestli a co jsem měl špatně, že se mi ta metoda nevolala, nicméně, komunikací na fóru, jsem docílil požadovaného, takže moc děkuji.