Sandbox: konfigurace UserManageru v configu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mates
Člen | 36
+
0
-

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

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.

mates
Člen | 36
+
0
-

Jasně mohu to tak udělat, díky. Ale když se zaměříme na originál Sandbox, tak nebylo by dobré navrhnout změnu? Jednak je tam tam metoda zbytečná a také to plete a navíc navrhuješ jinou strukturu oddělením.

Šaman
Člen | 2666
+
+1
-

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

Budu to muset ukázat někomu kolem, mě se ta metoda prostě nevolá :)

Šaman
Člen | 2666
+
0
-

Jak nevolá? Co ti to píše?

mates
Člen | 36
+
0
-

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.