Need guidance to start with Zend ACL

后端 未结 3 1805
独厮守ぢ
独厮守ぢ 2020-12-04 09:03

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

3条回答
  •  长情又很酷
    2020-12-04 09:16

    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;
    
        }
    
    }
    

提交回复
热议问题