Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Dwa rodzaje autoryzacji na jednym portalu.
Forum PHP.pl > Forum > PHP > Frameworki
nizzre
Mam taki problemik do rozwiązania i nie umiem wymyślić dobrego rozwiązania.

Buduję portal, gdzie część danych będzie widoczna po zalogowaniu.
Dodatkowo jak w każdy portal mam panel administracyjny.

Logowanie do panelu mam już zaprojektowane mniej więcej w ten sposób (sama autoryzacja użytkownika):

  1. $adapter = new Zend_Auth_Adapter_DbTable(
  2. Zend_Db_Table::getDefaultAdapter()
  3. );
  4. $adapter->setTableName('users');
  5. $adapter->setIdentityColumn('email');
  6. $adapter->setCredentialColumn('password');
  7. $adapter->setIdentity($values['email']);
  8. $adapter->setCredential(md5($values['password']));


Działa i nie mam tu pytań.

Część portalową dostępną po zalogowaniu chciałem udostępnić użytkownikom, którzy rejestrują się do innej tabeli w bazie danych: site_users

Wykonując autoryzację w ten sam sposób okazuje się że można mieć dostęp do części panela (gdy się ID pokryją z tych tabel), mimo że autoryzacja dotyczyła innych danych i innej tabeli w bazie.

Czy jest jakiś sposób aby dodać do autoryzacji jakiś identyfikator, po którym będzie można wychwycić którą metodą użytkownik się zalogował?

Pozdrawiam.

mazy
proponuje przechowywać użytkowników w jednej tabeli z jednym logowaniem przy użyciu Zend_Auth, natomiast do kontroli dostępu zastosować Zend_Alc tworząc stosowny plugin
nizzre
W panelu wykorzystuję Zend_Acl, rozbudowałem nawet bardziej system uprawnień, ale ale właśnie zastanawiam się czy to bezpieczniejsza opcja niż dwie autoryzacje ( o ile da się to tak rozwiązać aby jedna nie przejmowała praw drugiej)?
mazy
moim zdaniem nie rozróżniasz autoryzacji od acla, autoryzacja służy do określenia tożsamości użytkownika a alc do określenia dostępu do określonych zasobów
zend
W tabeli z użytkownikami zapisujesz też, do jakiej grupy dany użytkownik należy. I korzystasz z niej w acl. O co dokładnie Ci chodzi z nakładaniem się tych identyfikatorów?
VegetaSSJ
Twój problem polega na tym że Zend_Auth domyślnie używa do przechowywania danych sesji. Domyślnym strorage handlerem jest Zend_Auth_Storage_Session. Zend_Auth_Storage_Session używa domyślnej przestrzeni nazw NAMESPACE_DEFAULT = 'Zend_Auth', tak więc pomimo tego że używasz Zend_Auth w dwóch miejscach i z innymi danymi adaptera, to wyniki autoryzacji zapisywane i sprawdzane są w jednej przestrzeni nazw sesji.

W skrócie:

  1.  
  2. $auth = new Zend_Auth();
  3. $auth->setStorage(new Zend_Auth_Storage_Session('Nazwa_przestrzeni_nazw'));
  4. ...


API nie gryzie winksmiley.jpg http://zendframework.com/apidoc/1.10/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.