/** * Adds a Resource having an identifier unique to the ACL * * The $parent parameter may be a reference to, or the string identifier for, * the existing Resource from which the newly added Resource will inherit. * * @param Zend_Acl_Resource_Interface|string $resource * @param Zend_Acl_Resource_Interface|string $parent * @throws Zend_Acl_Exception * @return Zend_Acl Provides a fluent interface */ public function addResource($resource, $parent = null) { if (is_string($resource)) { $resource = new Zend_Acl_Resource($resource); } if (!$resource instanceof Zend_Acl_Resource_Interface) { require_once 'Zend/Acl/Exception.php'; throw new Zend_Acl_Exception('addResource() expects $resource to be of type Zend_Acl_Resource_Interface'); } $resourceId = $resource->getResourceId(); if ($this->has($resourceId)) { require_once 'Zend/Acl/Exception.php'; throw new Zend_Acl_Exception("Resource id '$resourceId' already exists in the ACL"); } $resourceParent = null; if (null !== $parent) { try { if ($parent instanceof Zend_Acl_Resource_Interface) { $resourceParentId = $parent->getResourceId(); } else { $resourceParentId = $parent; } $resourceParent = $this->get($resourceParentId); } catch (Zend_Acl_Exception $e) { require_once 'Zend/Acl/Exception.php'; throw new Zend_Acl_Exception("Parent Resource id '$resourceParentId' does not exist", 0, $e); } $this->_resources[$resourceParentId]['children'][$resourceId] = $resource; } $this->_resources[$resourceId] = array( 'instance' => $resource, 'parent' => $resourceParent, 'children' => array() ); return $this; }
/** * Carrega todos os menus cadastrados no sistema negando o acesso */ protected function carregaMenus() { $oAcoes = Administrativo_Model_Acao::getAll(); foreach ($oAcoes as $oAcao) { $sModulo = $oAcao->getControle()->getModulo()->getIdentidade(); $sControle = $oAcao->getControle()->getIdentidade(); $oAcoesExtra = explode(',', trim($oAcao->getSubAcoes())); $aAcoesExtra = array_merge($oAcoesExtra, array($oAcao->getAcaoAcl())); $oResource = new Zend_Acl_Resource($sModulo . ":" . $sControle); if (!$this->_acl->has($oResource->getResourceId())) { $this->_acl->addResource($oResource->getResourceId()); } foreach ($aAcoesExtra as $sAcao) { if (empty($sAcao)) { continue; } if (!$oAcao->getControle()->getVisivel()) { $this->_acl->allow('Usuario', $oResource->getResourceId(), $sAcao); } else { $this->_acl->deny('Usuario', $oResource->getResourceId(), $sAcao); } } } }
public function setParentResource($resource, $parent) { if (is_string($resource)) { $resource = new Zend_Acl_Resource($resource); } if (!$resource instanceof Zend_Acl_Resource_Interface) { throw new Zend_Acl_Exception('addResource() expects $resource to be of type Zend_Acl_Resource_Interface'); } $resourceId = $resource->getResourceId(); if (!$this->has($resourceId)) { throw new Zend_Acl_Exception("Resource id '{$resourceId}' doesn't exists in the ACL"); } //unset children of previous parent $previousParent = $this->_resources[$resourceId]['parent']; if ($previousParent) { unset($this->_resources[$previousParent->getResourceId()]['children'][$resourceId]); } $resourceParent = null; if (null !== $parent) { try { if ($parent instanceof Zend_Acl_Resource_Interface) { $resourceParentId = $parent->getResourceId(); } else { $resourceParentId = $parent; } $resourceParent = $this->get($resourceParentId); } catch (Zend_Acl_Exception $e) { throw new Zend_Acl_Exception("Parent Resource id '{$resourceParentId}' does not exist", 0, $e); } $this->_resources[$resourceParentId]['children'][$resourceId] = $resource; } $this->_resources[$resourceId]['parent'] = $resourceParent; return $this; }
/** * Validação das Acls a cada chamada de metodo * * @param $oRequest * @return boolean */ protected function _isAuthorized(Zend_Controller_Request_Abstract $oRequest) { self::checkVersaoSistema(); $sModule = $oRequest->getModuleName(); $sController = $oRequest->getControllerName(); $sAction = $oRequest->getActionName(); $oAcl = self::$_acl; $oResource = new Zend_Acl_Resource($sModule . ':' . $sController); if (!$oAcl->has($oResource->getResourceId())) { self::menuNaoCadastrado($oRequest); self::carregaAuditoria($oRequest); return TRUE; } if ($oAcl->has($oResource->getResourceId()) && $oAcl->isAllowed('Usuario', $oResource->getResourceId(), $sAction)) { self::carregaAuditoria($oRequest); return TRUE; } return FALSE; }