Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zend Framework zend_acl zend_auth
Forum PHP.pl > Forum > Przedszkole
cykcykacz
Witam, uczę się Zend Framework z tutoriala, w pewnym momencie napotykam na błąd.

Plik Bootstrap.php
Kod
<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAutoLoad() {

        $modelLoader = new Zend_Application_Module_AutoLoader(array(
                        'namespace' => '',
                        'basePath' => APPLICATION_PATH ));

        $this->_acl = new Model_LibraryAcl;
        $this->_auth = Zend_Auth::getInstance();

        $fc = Zend_Controller_Front::getInstance();
        $fc->registerPlugin(new Plugin_AccessCheck());

        return $modelLoader;
    }



Plik AccessCheck.php
Kod
<?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->_acl = $auth;
    }
    public function preDispatch(Zend_Controller_Request_Abstract $request) {
                $resource = $request->getControllerName();
                $action = $request->getActionName();

                $identity = $this->_auth->getSorage()->read();
                $role = $identity->role;

                if(!$this->_acl->isAllowed($role, $resource, $action)){
                                $request->setControllerName('authentication')
                                        ->setActionName('login');
        }
    }
}


Plik LibraryAcl.php
Kod
<?php
class Model_LibraryAcl extends Zend_Acl {
    public function __construct() {
        $this->add(new Zend_Acl_Resource('sala'));
        $this->add(new Zend_Acl_Resource('edit'), 'sala');
        $this->add(new Zend_Acl_Resource('add'), 'sala');

        $this->add(new Zend_Acl_Resource('sale'));
        $this->add(new Zend_Acl_Resource('list'), 'sale');

        $this->addRole(new Zend_Acl_Role('user'));
        $this->addRole(new Zend_Acl_Role('admin'), 'user');

        $this->allow('user', 'sale', 'list');
        $this->allow('admin', 'sala', 'edit');
        $this->allow('admin', 'sala', 'add');
    }
}


Otrzymuję taki komunikat:
Kod
Catchable fatal error: Argument 1 passed to Plugin_AccessCheck::__construct() must be an instance of Zend_Acl, none given, called in C:\xampp\htdocs\sala\application\Bootstrap.php on line 15 and defined in C:\xampp\htdocs\sala\application\plugins\AccessCheck.php on line 7


Proszę o lekarstow:).
Ps: Pewnie wszystko jest ładnie opisane w komunikacie błędu, jednak ja jeszcze tego nie ogarniam.
darko
bootstrap.php

1. dodaj dwa pola:

  1. private $_acl;

oraz
  1. private $_auth;


2. Zamień
  1. $fc->registerPlugin(new Plugin_AccessCheck());


na

  1. $fc->registerPlugin(new Plugin_AccessCheck($this->_acl, $this->_auth));


3. w konstruktorze Plugin_AccessCheck zamień

  1. $this->_acl = $acl;
  2. $this->_acl = $auth;


na

  1. $this->_acl = $acl;
  2. $this->_auth = $auth;



ps. świetny jest ten tutorial na YouTube smile.gif
cykcykacz
Super wprowadziłem zmiany i działa. Ale się cieszę smile.gif.
Swoją drogą ten tutorial jest bardzo dobry dla takich osób, jak ja które chcą skorzystać z FrameWorka Zend i nie wiedzą jak zacząć. "Aleksander" super przedstawił i wytłumaczył. Naprawdę respekt dla niego!
darko
Popieram, Alex daje radę, polecam też Jego blog, miejscami dokumentacja do ZF jest delikatnie ujmując słaba, a tutoriale Alexa docierają do najbardziej odpornych na wiedzę.
cykcykacz
Kurcze jeszcze mam mały problem otóż po wprowadzeniu poprawnego usera oraz password dostaje taki komunikat:
Kod
Fatal error: Uncaught exception 'Zend_Acl_Role_Registry_Exception' with message 'Role 'users' not found'
darko
LibraryAcl.php
zamień

$this->addRole(new Zend_Acl_Role('user'));

na

$this->addRole(new Zend_Acl_Role('users'));

cykcykacz
Kod
Fatal error: Uncaught exception 'Zend_Acl_Role_Registry_Exception' with message 'Parent Role id 'user' does not exist'
darko
  1. $this->addRole(new Zend_Acl_Role('users'));
  2. $this->addRole(new Zend_Acl_Role('admin'), 'users');
cykcykacz
Kod
Fatal error: Uncaught exception 'Zend_Acl_Role_Registry_Exception' with message 'Role 'user' not found' in


sciana.gif

Sam nie wiem czy może prócz tych plików które podałem mogę mieć gdzieś błąd?
darko
na pewno podmieniłeś w acl konsekwentnie

$this->allow('user', 'sale', 'list');

na

$this->allow('users', 'sale', 'list');

questionmark.gif
cykcykacz
Po podmienieniu na users pokazuje mi się strona z takim komunikatem:

"Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie.


* Problem ten może się pojawić w wyniku zablokowania lub odrzucenia ciasteczek."

Może to pomoże http://www.youtube.com/watch?v=1A3o35oHmfA...E9&index=18 tutaj opisuje bug...
darko
Bo acla masz źle ustawionego:

dodaj
  1. $this->add(new Zend_Acl_Resource("index"));
  2. $this->add(new Zend_Acl_Resource("error"));
  3. $this->add(new Zend_Acl_Resource("authentication"));
  4. $this->add(new Zend_Acl_Resource("login"));
  5. $this->add(new Zend_Acl_Resource("logout"));
  6.  
  7. $this->allow("users", "error");
  8. $this->allow("users","index");
  9. $this->allow("users", "login");
  10. $this->allow("users","logout");
  11. $this->allow("users","authentication");
cykcykacz
Ok zadziałało ale tego nie rozumiem do końca możesz mi wytłumaczyć że tak powiem co z czym się je:)?

darko
Odsyłam do dokumen... ekhm Aleksa smile.gif
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.