autentizace proti vice „zdrojum“

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

jsem v situaci, kdy mam vice druhu uzivatelu – s kterymi chci ale samozrejme pracovat jednotne (sprava roli, prihlaseni do systemu).

uvedu priklad – mam treba databazi Foo, v ktere je tabulka „cs_ct“, a databazi Bar (treba uplne na jine masine), v ktere je tabulka „cs_t“ …

pri pouziti login/heslo nemuzu samozrejme urcit, do jake skupiny uzivatel, ktery se prihlasuje, patri. proto budu mit na strance vice formularu, popripade nejake pulldown menu, ktere urci, o koho vlastne jde a s cim mam porovnavat login/heslo.

jak ale mohu dynamicky zaregistrovat autentikacni tridu? :) nebo jak se takovato vec resi?

Jod
Člen | 701
+
0
-

Moc nechápem očo ti ide, takže neviem či to ide spraviť aj efektívnejšie, auth handler sa registruje v Nette/Web/User

Nilp
Člen | 65
+
0
-

Ja mam v BasePresenteru tuhle metodu:

protected function setupAuthentication($namespace, $authenticator)
{
   $locator = Environment::getServiceLocator();
   $locator->addService($authenticator, 'Nette\Security\IAuthenticator');
   Environment::getUser()->setNamespace($namespace);
}

a pote treba v Admin_BasePresenter::startup volam $this->setupAuthentication('admin', 'AdminModel').

wdolek
Člen | 331
+
0
-

Jod: user/heslo mam z vice zdroju (napriklad db s ucty lekaru je jinde, nez db s ucty uklizecek) – chci vsak, aby se vsichni mohli na web prihlasit (samozrejme s vyberem patricneho formulare pro zalogovani se)

Nilp: no vypada to pekne :P ale stejne kdyz na to cucim, nenapada me, kam to zabudovat… a hlavne jak…

chvilku sem premyslel a napadlo me opravdu proste reseni. vzhledem k tomu, ze musim mit vice „authenticate( )“ metod (pro kazdy typ uctu), budu mit tim padem vice handleru. konkretni formular na strance se posila na konkretni handler – a v nem uz proste jen reknu, v jake tride ze je autentikace pro daneho uzivatele…

tedy napriklad logovani pro lekare pujde pres MedicLoginPresenter::loginPosted; logovani pro uklizecky pujde pres CleanerLoginPresenter::loginPosted

:) ale teda ;D jeste aby to fungovalo tak jak chci…

Ondřej Mirtes
Člen | 1536
+
0
-

Můžeš mít jednu authenticate metodu, která prohledá obě tabulky. A pro kontrolu ACL ti už stačí opravdu jeden mechanismus, stačí, aby obě tabulky sdílely jednu tabulku autorizačních rolí.

wdolek
Člen | 331
+
0
-

LastHunter: jakoze bych dostal login/heslo – zkusil ho na prvni skupine uctu, kdyz by se to neujalo, sel bych na druhou skupinu uctu… az bych skoncil u n-te skupiny uctu ? to se mi zrovinka moc nelibi.
jinak role budu mit asi natvrdo v aplikaci, v databazi pak bude jen nejaky string – snad ani zadne dedeni roli nevyuziju.

jak je to s temi jmenymi prostory uzivatelu? to se ulozi do session/cookie, nebo pak budu muset pri kazdem hitu stranky zjistovat znovu a znovu a znovu, do jake skupiny uzivatel patri?

mlady
Člen | 24
+
0
-

Jedným z riešení by bolo aj to, že by si pre každý typ prihlásenia vytvoril samostatnú triedu (LekariAuth, UpratovackyAuth, …), ktorá by implementovala rozhranie Nette\Security\IAuthenticator. Potom by si vytvoril nejaký SuperAuthenticator (ktorý by tiež implementoval toto rozhranie) a pri prihlásení by si jednoducho poslal údaje SuperAuthenticator-ovi a on by to delegoval na tú správnu triedu.

Nilp
Člen | 65
+
0
-

wdolek: overovani uzivatelu mi zajistuje prislusna trida modelu: UserModel, AdminModel, atd; ta implementuje interface IAuthenticator. Presentery mam rozdelene treba takto:

BasePresenter
`-- User_BasePresenter
    `-- User_HomepagePresenter
`-- Admin_BasePresenter
    `-- Admin_DashboardPresenter

V BasePresenter implementuju tu vyse uvedenou metodu. V BasePresenterech modulu (User, Admin) mam metodu authorize, ktera mi overi jestli je uzivatel/admin prihlaseny, v urcitych rolich apod.
No a v tech final presenterech nastavim pres setupAuthenticate namespace, do ktereho se budou ukladat autentifikacni udaje (takze muzes byt zaroven prihlaseny jako admin i jako uzivatel) a autentifikacni handler. Dale uz volam jen metodu authorize, a to bud ve startup nebo v jednotlivych akcich final presenteru.