Viacnásobný IAuthenticator pre viacej modulov?

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

Existuje možnosť aby každý modul mohol mať vlastný Authenticator?

22
Člen | 1478
+
0
-

A proč?

Peppy
Člen | 137
+
0
-

Dobrá otázka…nad tou som sa nezamýšľal :D

Aurielle
Člen | 1281
+
0
-

Authenticator můžeš před každým přihlášením změnit…

hAssassin
Člen | 293
+
0
-

Zrovna tohle jsem taky řešil a nemělo by být problém si autentikátor nastavit vždycky před přihlášením v callbacku příslušnýho formuláře (viz tady):

$this->user->setAuthenticator($authenticator);
$this->user->login($values->username, $values->password);

Ale měl bych otázku: dejme tomu že mám moduly Admin a Front a oba jsou na sobě nezávislé co se přihlašování týče (Admin má administrátory uloženy v tabulce ‚admins‘ a Front v tabulce ‚users‘). Výběr autentikátoru při přihlášení není problém, ale jak ověřit zda se do Admina nepokouší dostat někdo kdo už je přihlášenej ve Frontu? Vím existují jmené prostory ale tohle je dost stručný. Jak to tedy používat? Teda resp. jde to vůbec bez nutnosti ověřovat roli uživatele?

22
Člen | 1478
+
0
-

podle mě by měla mít applikace pouze jeden Authenticator .-)

Aurielle
Člen | 1281
+
0
-

Pokud nastavíš jiný namespace, chová se Nette tak, jako bys nebyl přihlášený vůbec, pokud jsi přihlášený v jiném jmenném prostoru.

hAssassin
Člen | 293
+
0
-

to 22 > tím si nejsem úplně jistý, ale ok. Jen by mě zajímalo jak by si tedy ten autheticator řešil? měl bys všechny uživatele (obou modulů) v jedný tabulce a rozhodoval se podle role? Případně jak rozlišíš, že do tohohle modulu může uživatel s rolí ‚Registred‘ a do jinýho zase uživatel s ‚Admin‘? Nebo bys na to šel úplně jinak?

to gmvasek> takže namespace nastavit vždy po volaní $user->login() ? Co mi pořád ovšem nejde do hlavy je to, jak zjistit ve kterým namespace je aktuální uživatel právě přihlášen. Resp. vidím to tak, že pokud je přihlášenej ve Frontu a přejde do Admina, tak by ho to mělo hodit na stránku přihlášení do admina, tady ale asi $user->isLoggedIn() nepostačí ne? Případně, pokud se uživatel přihlásí do novýho namespace tak ho to v tom původním odhlásí nebo ne?

22
Člen | 1478
+
0
-

@hAssasin: ano přes role se mi to jeví jako ideální..

hAssassin
Člen | 293
+
0
-

Tak ješte trochu spamu :-)

@22 > asi máš pravdu, na jednodušší věci to stačit bude, jen nevím by to stačilo i kdyby byly 2 Front moduly (na sobě nezávislí) a každý by měl vlastní registraci. Třeba jako tady: wiki a forum (ikdyž tady to asi bude společný, ale jde mi o ten princip)…

Jinak ty namespace asi chapu, ono asi bude stačit nastavit namespace v BasePresenteru (třeba ve startup()) danýho modulu a pak to kontroluje podle akutálního namespace. Nemám pravdu? (zkouším to a zda se že to tak bude:-)

22
Člen | 1478
+
0
-

bych naopak řekl, že čím složitější, tím má ACL větší význam..

Aurielle
Člen | 1281
+
0
-

@hAssassin: ano, já nastavuji namespace v BasePresenteru a chodí to v pohodě :)

Filip Procházka
Moderator | 4668
+
0
-

Přesně tak, čím složitější aplikace, tím víc potřebuješ ACL. A dvě registrace na stejný web, byť se dělí na wiki a fórum? Co to je za blbost? :) Říká ti něco uživatelská přívětivost? :)

Authenticator představuje způsob přihlášení. Tzn že máš třeba ApiAuthenticator, UsernameAndPasswordAuthenticator, CodeAuthenticator (ty názvy samozřejmě přeháním, jsou jen pro ilustraci funkčnosti)

Naproti tomu Authorizator představuje povolení přístupu na určitou akci. Tzn presenter, model, …

hAssassin
Člen | 293
+
0
-

HospiLan > uznavam, moje chyba, s jednim authenticatorem to je lepsi. me trochu matlo, ze sme neco podobnyho resili asi pred rokem v praci, teda ja to primo neresil (to kolega), ale vim ze se pridavala k e-shopu nova sluzba a ta mela rozdilnou registraci a prihlasovaci udaje nez puvodni e-shop (ale uz si moc nepamatuju detialy… ehm, teda vubec :D, jen me to ted zmatlo).

Kazdopadne, authenticator jeden, ale authorizatoru muze byt teoreticky vic (treba pro kazdy modul zvlast)? Nebo taky jen jeden? Nebo zase kecam nesmysly? :)

Filip Procházka
Moderator | 4668
+
0
-

Authorizator představuje logiku, která něco povoluje a v Nette je jeden hotový, měl by ti stačit. Tzn že do něj si nastavíš co kdo může a nemůže a pak se ho budeš ptát. Více si přečti zde, doporučoval bych to nastavení ukládat do databáze a kešovat vytvořený a nastavený objekt.

hAssassin
Člen | 293
+
0
-

HospiLan > jj kecal sem nesmysly. Byl sem dost unavenej po ranu tak mi to nemyslelo :D O Permission vim a pouzivam ji, teda resp. nechtel se mi load roli, zdroju a opravneni davat primo do Application nebo nekam do BasePresenteru, takze sem z Permission podedil MyPermission a v jeho konstruktoru ty role a vsechno vytvarim. Myslim ze takhle to je good, ze?

P.S. samo ze MyPermission mam regnuty jako sluzbu authorizator

Editoval hAssassin (30. 6. 2011 18:18)

Filip Procházka
Moderator | 4668
+
0
-

No v Application nebo v BasePresenteru bych to určitě nedělal :) Spíš bych si podědil, jak ty říkáš, nebo udělal nějaký builder, předal mu spojení do databáze, popř nějakou service co to načítá a tam to poskládal :)

Protože tohle je takové nešikovné na údržbu, ale je ok :)

Peppy
Člen | 137
+
0
-

Ahoj, tak som tu spať…čítam to znova a znova a nejako mi to nezapadá do plánu…mám proste admin modul, ktorý je ODDELENÝ od zvyšku aplikácie (tzn. pracuje samostatne, nie je závislý na iných moduloch a tabuľkách), proste je to akýsi control panel. Do neho majú prístup iba rooti, ale nie napr. admin fóra atp. No na to aby administračný backend pracoval (pracuje na vlastných tabuľkách) musí mať autorizačný handler úplne iný (lebo berie z inej tabuľky userov (__roots__ tabuľka))…čo vy na to?

Filip Procházka
Moderator | 4668
+
0
-

Nenapadá mě rozumný důvod, proč mít rooty oddělené od obyčejných uživatelů. Navíc, brzy narazíš, až si klient vymyslí, že chce jednomu adminovi dát tato oprávnění a druhému tato.

Peppy
Člen | 137
+
0
-

Tak normálne na ACL ?? Všetko do jednej tabuľky users a tam to hľadať?? Ide o to, že ten modul (napr. fórum) sa môže meniť a ja neviem, či, a ako sa bude ten modul správať a či to vôbec bude napríklad fórum. Môže to byť napr. nejaké portfólio, ktoré tabuľku potrebovať nemusí…a zase s každým modulom sa menia požiadavky na databázu a tabuľky, preto nemôžem urobiť nejakú stacionárnu users tabuľku a povedať im, aby do tabuliek nijako nešahali…

Má to byť modulárna aplikácia, ako hovoríte „se vším všudy“, to platí aj pre databázu…

Editoval Peppy (5. 7. 2011 14:33)

Filip Procházka
Moderator | 4668
+
0
-

To ale přece není problém :) Stačí aby tabulky linkovaly users, né naopak. Pak nebudeš muset upravovat users ani jednotlivé acl_*, budeš jen přidávat záznamy.

A moduly by měly používat vlastní tabulky, popř. max vyžadovat přítomnost nějakého sloupce v users (a dalších), pokud je nezbytně nutné, aby v ní byl. Pak můžeš mít nějaký Manager, který moduly projde a splní jejich požadavky. Čili tyto sloupce vytvoří, nebo smaže. To samé tabulky.

Kde je problém?

Peppy
Člen | 137
+
0
-

Neviem…nejako asi nepremyslený plán…

mám z toho taký malý brainf*ck :D :D…

Editoval Peppy (5. 7. 2011 17:24)