Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]problem z Auth
Forum PHP.pl > Forum > PHP > Frameworki
robos85
Witam,

zaczynam naukę Zend FM. Robię sobie tutki z neta i w pewnym momencie natrafiłem na problem.
Jestem na etapie Auth/Acl.

Bootstrap.php:
  1. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  2. {
  3. protected function _initAutoload()
  4. {
  5. $modelLoader = new Zend_Application_Module_Autoloader(array(
  6. 'namespace' => '',
  7. 'basePath' => APPLICATION_PATH
  8. ));
  9.  
  10. $acl = new Model_LibraryAcl; // obiekt modelu do ACL potrzebny do przekazania do pluginu
  11. $auth = Zend_Auth::getInstance(); // obiekt modelu do AUTH potrzebny do przekazania do pluginu
  12.  
  13. $fc = Zend_Controller_Front::getInstance(); // instancja - umożliwia ładowanie pluginów
  14. $fc->registerPlugin( new Plugin_AccessCheck($acl, $auth) ); // rejestruje plugin. Przekazać 2 zmienne potrzebne do sprawdzenia
  15.  
  16. return $modelLoader;
  17. }
  18. }


plugins/AccessCheck.php:
  1. class Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract
  2. {
  3. private $_acl = null;
  4. private $_auth = null;
  5.  
  6. public function __construct( Zend_Acl $acl, Zend_Auth $auth )
  7. {
  8. $this->_acl = $acl;
  9. $this->_auth = $auth;
  10. }
  11.  
  12. public function preDispatch( Zend_Controller_Request_Abstract $request ) // musimy poznać jaki aktualnie jest kontroler. Robimy to dzięki Zend_Controller_Request_Abstract i przypisujemy do zmiennej $request
  13. {
  14. $resource = $request->getControllerName(); // nazwa kontrolera
  15. $action = $request->getActionName(); // akcja
  16.  
  17. $identity = $this->_auth->getStorage()->read(); // pobieramy i odczytujemy dane z Auth odnośnie informacji o userze
  18. $role = $identity->role; // pobranie roli. role to nazwa pola z bazy
  19.  
  20. if( !$this->_acl->isAllowed($role, $resource, $action) ) // sprawdzenie zgodności z warunkami w modelu acl
  21. {
  22. $request->setControllerName('authentication') // ustawienie nazwy kontrolera
  23. ->setActionName('login'); // ustawienie nazwy akcji
  24.  
  25. }
  26. }
  27. }


Dostaje taki error:
Kod
Notice: Trying to get property of non-object in C:\wamp\www\dziury\application\plugins\AccessCheck.php on line 19


O co chodzi dokładnie? Uzywam 1.9 PL1 a tutek na 1.8 jest.

Linia z błędu to: $role = $identity->role;
batman
Najpierw kilka uwag.
1. Zend_Auth korzysta ze wzorca singleton. Nie musisz przekazywać obiektu tej klasy jako atrybut funkcji, Wystarczy takie coś:
  1. $auth = Zend_Auth::getInstance();

2. Użytkownika pobierasz tak (co nie oznacza, że Twój sposób jest błędny):
  1. $identity = $auth->getIdentity();

3. Obiekt $acl możesz trzymać w rejestrze. Prawdopodobnie przyda Ci się w jeszcze innym miejscu.

A teraz do rzeczy:
Przed $role = $identity->role dodaj Zend_Debug::dump($role);
Jeśli będziesz miał null, to znaczy, że nie zapisałeś nic do obiektu $auth. Domyślam się, że sprawdzasz użytkownika, który się nie zalogował.
trylas
hej, ze tak sie wtrące
@batman
jesli Model_Acl jest klasą (extends Zend_Acl) to jak ten obiekt trzymac w rejestrze? i jak otrzymac dostep do metody isAllowed()
ponizszy kod do bootsrapera?
  1. $register = Zend_Registry::getInstance();
  2. $register->set('acl', $acl);


pozdrawiam
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.