zaczynam naukę Zend FM. Robię sobie tutki z neta i w pewnym momencie natrafiłem na problem.
Jestem na etapie Auth/Acl.
Bootstrap.php:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { 'namespace' => '', 'basePath' => APPLICATION_PATH )); $acl = new Model_LibraryAcl; // obiekt modelu do ACL potrzebny do przekazania do pluginu $auth = Zend_Auth::getInstance(); // obiekt modelu do AUTH potrzebny do przekazania do pluginu $fc = Zend_Controller_Front::getInstance(); // instancja - umożliwia ładowanie pluginów $fc->registerPlugin( new Plugin_AccessCheck($acl, $auth) ); // rejestruje plugin. Przekazać 2 zmienne potrzebne do sprawdzenia return $modelLoader; } }
plugins/AccessCheck.php:
class Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract { private $_acl = null; private $_auth = null; public function __construct( Zend_Acl $acl, Zend_Auth $auth ) { $this->_acl = $acl; $this->_auth = $auth; } 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 { $resource = $request->getControllerName(); // nazwa kontrolera $action = $request->getActionName(); // akcja $identity = $this->_auth->getStorage()->read(); // pobieramy i odczytujemy dane z Auth odnośnie informacji o userze $role = $identity->role; // pobranie roli. role to nazwa pola z bazy if( !$this->_acl->isAllowed($role, $resource, $action) ) // sprawdzenie zgodności z warunkami w modelu acl { $request->setControllerName('authentication') // ustawienie nazwy kontrolera ->setActionName('login'); // ustawienie nazwy akcji } } }
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;