Witam,
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
$acl->allow(null, array('index', 'error')); // 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
$acl->deny('guest', 'article', array('add', 'edit')); // 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.
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'
);
Dlaczego ACL nie chce wpuścić mnie do zasobu $acl->add(new Zend_Acl_Resource('produkt-edytuj')); ?
Ten post edytował cykcykacz 14.01.2012, 20:29:00