This feature will be useful for the one who actually wants to control the user roles & privileges to access modules/action in the Zend Framework projects.
First create a class and define your roles and resources to be used.
Eg:
Roles: Admin, user, Guest
Resources: default, admin (in this eg resources are modules)
<?php class MyAcl extends Zend_Acl { public function __construct() { // Resources /* Default module */ $this->add(new Zend_Acl_Resource('default')); /* Admin module */ $this->add(new Zend_Acl_Resource('admin')); // Roles $this->addRole(new Zend_Acl_Role('Admin')) ->addRole(new Zend_Acl_Role('User'), 'Admin') ->addRole(new Zend_Acl_Role('Guest')); // Authorization $this->deny('Guest', 'admin'); ->allow(array('Admin', 'User', 'Guest'), array('default')) ->allow(array('Admin', 'User'), array('admin')); } } ?>
<?php class Plugin_Auth extends Zend_Controller_Plugin_Abstract{ private $_auth; private $_acl; private $_noauth = array ('module' => 'login', 'controller' => 'index', 'action' => 'index'); private $_noacl = array ('module' => 'default', 'controller' => 'error', 'action' => 'denied'); public function __construct () { $this->_auth = Zend_Auth::getInstance(); $this->_acl = new MyAcl(); } public function preDispatch(Zend_Controller_Request_Abstract $request) { $role = 'Guest'; if($this->_auth->hasIdentity()) { $role = $this->_auth->getIdentity()->role; } $controller = $request->controller; $action = $request->action; $module = $request->module; // Assign resource based on your requirements $resource = $module; if (!$this->_acl->has($resource)) { $resource = null; } if (!$this->_acl->isAllowed($role, $resource, $action)) //$role, $resource, $action { if(!$this->_auth->hasIdentity()) { $module = $this->_noauth['module']; $controller = $this->_noauth['controller']; $action = $this->_noauth['action']; } else { $module = $this->_noacl['module']; $controller = $this->_noacl['controller']; $action = $this->_noacl['action']; } } $request->setModuleName($module); $request->setControllerName($controller); $request->setActionName($action); } } ?>