robię stronkę przy pomocy Zend Framework.
Dodałem Zend_ACL i wszystko jest wporządku do momętu kiedy chcę dodać do ACL trasy routera. Tak wygląda mój plugin ACL:
<?php class Plugin_Acl extends Zend_Controller_Plugin_Abstract { public function preDispatch(Zend_Controller_Request_Abstract $request) { // set up acl $acl = new Zend_Acl(); // add the roles $acl->addRole(new Zend_Acl_Role('guest')); $acl->addRole(new Zend_Acl_Role('user'), 'guest'); $acl->addRole(new Zend_Acl_Role('administrator'), 'user'); // add the resources $acl->add(new Zend_Acl_Resource('index')); $acl->add(new Zend_Acl_Resource('error')); $acl->add(new Zend_Acl_Resource('article')); $acl->add(new Zend_Acl_Resource('portfolio')); $acl->add(new Zend_Acl_Resource('contact')); $acl->add(new Zend_Acl_Resource('user')); $acl->add(new Zend_Acl_Resource('produkt-edytuj')); // set up the access rules // a guest can only read content and login $acl->allow('guest', 'article'); $acl->allow('guest', 'portfolio'); $acl->allow('guest', 'contact'); $acl->allow('guest', 'user'); // cms users can also work with content // administrators can do anything $acl->allow('administrator', null); // fetch the current user $auth = Zend_Auth::getInstance(); if($auth->hasIdentity()) { $identity = $auth->getIdentity(); }else{ $role = 'guest'; } $controller = $request->controller; $action = $request->action; if (!$acl->isAllowed($role, $controller, $action)) { if ($role == 'guest') { $request->setControllerName('user'); $request->setActionName('login'); } else { $request->setControllerName('error'); $request->setActionName('noauth'); } } } }
I w momęcie kiedy chcę wejść na adres jako administrator http://projekt.localhost/produkt-edytuj dostaję komunikat:
Kod
Error: Not Authorized!
Sorry, you are not authorized to access this resource.
Sorry, you are not authorized to access this resource.
Router do aplikacji jest dodany w ten sposób!
w folderze public/index.php
... $front = Zend_Controller_Front::getInstance(); $front->setParam('useDefaultControllerAlways', false); include_once ('router.php'); ...
A sam roiter wygląda tak:
Kod
$router = $front->getRouter();
$route = new Zend_Controller_Router_Route_Regex(
'produkt-edytuj/([0-9]+)',
array(
'module' => 'default',
'controller' => 'article',
'action' => 'edit'
),
array(
1 => 'id'
),
'produkt-edytuj/%s'
);
$route = new Zend_Controller_Router_Route_Regex(
'produkt-edytuj/([0-9]+)',
array(
'module' => 'default',
'controller' => 'article',
'action' => 'edit'
),
array(
1 => 'id'
),
'produkt-edytuj/%s'
);
Dlaczego ACL nie chce wpuścić mnie do zasobu $acl->add(new Zend_Acl_Resource('produkt-edytuj')); ?