I am currently working on a site that requires ACL and as I am using Zend, it makes sense for me to make use of their ACL class but I have little to zero idea of how to do t
This solution may prove to be the simplest implementation of Zend_Acl.
Example:
class UserController extends Zend_Controller_Action {
public function preDispatch(){
$resource = 'user_area';
$privilege = $this->_request->getActionName();
if (!$this->_helper->acl($resource, $privilege)) $this->_redirect();
}
}
Zend/Controller/Action/Helper/Acl.php
class Zend_Controller_Action_Helper_Acl extends Zend_Controller_Action_Helper_Abstract {
protected $acl;
protected $role;
protected function getAcl(){
if (is_null($this->acl)){
$acl = new Zend_Acl();
$acl->addResource(new Zend_Acl_Resource('user_area'));
$acl->addResource(new Zend_Acl_Resource('customer_area'), 'user_area');
$acl->addResource(new Zend_Acl_Resource('web_area'));
$acl->addRole(new Zend_Acl_Role('guest'));
$acl->addRole(new Zend_Acl_Role('user'), 'guest');
$acl->allow('guest', 'web_area');
$acl->allow('guest', 'user_area', array(
'forgot-password',
'login'
));
$acl->allow('user', 'user_area');
$acl->allow('customer', 'customer_area');
$this->acl = $acl;
}
return $this->acl;
}
protected function getRole(){
if (is_null($this->role)){
$session = new Zend_Session_Namespace('session');
$role = (isset($session->userType)) ? $session->userType : 'guest';
$this->role = $role;
}
return $this->role;
}
public function direct($resource, $privilege = null){
$acl = $this->getAcl();
$role = $this->getRole();
$allowed = $acl->isAllowed($role, $resource, $privilege);
return $allowed;
}
}