Front/admin autorizace/autentizace – dohromady nebo odděleně?
- Jiří Nápravník
- Člen | 710
Jakým způsobem řešíte autentizaci/autorizaci u klasické aplikace kdy máte backend, kam mají přístup jen administrátoři (s různým oprávněním) a frontend, kde se přihlašují uživatelé (např. nakupující v eshopu). Používáte odděléné Authenticatory a tedy i sólo tabulky v databázi, nebo na to hledíte jako na jednu entitu a tudíž vše v jedné tabulce?
Viděl jsem oba názory, více převládala varianta je to jedna entita a dělí to role. Ale pokud pohlédnu na variantu druhou, tak u administrátorů ukládám úplně jiné informace než například u těch nakupujících na eshopu.
Pak mě ještě napadla varianta co je společné, bude jedna entita, a uživatele a admina podědím a doplním atirbuty, které potřebuji.
A je vůbec v Nette nějak rozumně řešitelný případ, mít tu verzi s dvěma entitami? V presenteru se volá přeci jen user přes $this->getUser(), což může být celkem problém v případě, že by bylo více entit. Nebo mi něco uniká?
- llsm
- Člen | 121
Ja mam u nekterych rozsahlejsich aplikaci uplne oddeleny frontend a backend, backend je samostatny projekt na subdomene. Vetsinou jsem dosel k tomu, ze frontend a backend maji tak malo spolecneho, ze mi to ani neprislo jako moc vic prace a naopak se nemusim starat o ruzna bezpecnostni rizika. Ma to samozrejme i svoje nevyhody (nektere kusy kodu se opakuji v obou castech).
Editoval llsm (17. 9. 2013 15:20)
- na1k
- Člen | 288
Taky se přimlouvám za oddělené přihlašování.
Na začátku to sice vždycky vypadá, že logicky jsou všechno v základu stejní uživatelé a stačí rozlišovat rolema. V praxi se pak ale rozšiřuje funkcionalita a v drtivé většině případů se začne přední a zadní uživatel dost rozcházet. Do chce třeba někdo přidat ještě FB přihlášení a v tu chvíli už je to docela mazec.
Takže ústupek od idealistického návrhu směrem k praktičnosti :)
Editoval na1k (17. 9. 2013 15:39)
- na1k
- Člen | 288
Ještě doplnění pro @Jiří Nápravník
V aplikaci jde velice snadno mít oddělené uživatele. V presenteru je
sice uživatel vždy jediný, ale typicky je aplikace rozdělená do modulů.
Každý modul pak v BasePresenteru zavolá při startupu
$this->user->storage->setNamespace('front')
(resp.
back
), čímž se uživatelé naprosto oddělí a můžou se
nezávisle přihlašovat.
- Jiří Nápravník
- Člen | 710
Předně se omlouvám za pozdější reakci, dříve jsem se k tomu nedostal.
Použiji asi multiauthenticator díky na1k za info o nastavení namespace. a na to směřuje moje otázka. Pokud budu mít pro Security/User dva namespace a budu chtít teďka předat si Security/User pomocí DI v contructoru, bude to zapisovat do toho správného? Zkrátka abych pak nezapisoval Usera z frontendu do administrace a naopak.