Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

visitante_php

zf + autorizacao

Recommended Posts

Eu segui este tutorial do portal (http://imasters.com.br/artigo/18025/zend/autorizacao-com-zend-framework) porem, ao adiocionar outras paginas o usuario escritor tem acesso ao admin onde nao deveria ter... sgue codigo

 

 

//aplicacao_acl_setup

<?php

class Aplicacao_Acl_Setup
{

/**
	* @var Zend_Acl
	*/
protected $_acl;

public function __construct()
{
   	$this -> _acl = new Zend_Acl();
   	$this -> _initialize();
}

protected function _initialize()
{
   	$this -> _setupRoles();
   	$this -> _setupResources();
   	$this -> _setupPrivileges();
   	$this -> _saveAcl();
}

protected function _setupRoles()
{
   	$this -> _acl -> addRole( new Zend_Acl_Role( 'guest' ) );
   	$this -> _acl -> addRole( new Zend_Acl_Role( 'writer' ), 'guest' );
   	$this -> _acl -> addRole( new Zend_Acl_Role( 'admin' ), 'writer' );
}

protected function _setupResources()
{
   	$this -> _acl -> addResource( new Zend_Acl_Resource( 'index' ) );
   	$this -> _acl -> addResource( new Zend_Acl_Resource( 'auth' ) );
   	$this -> _acl -> addResource( new Zend_Acl_Resource( 'error' ) );
   	$this -> _acl -> addResource( new Zend_Acl_Resource( 'blog' ) );
   	$this -> _acl -> addResource( new Zend_Acl_Resource( 'admin' ) );
}

protected function _setupPrivileges()
{

   	$this -> _acl -> allow( 'guest', 'auth', array( 'index', 'login' ) );

   	$this -> _acl -> allow( 'guest', 'error', array( 'error', 'forbidden' ) );

   	$this -> _acl -> allow( 'writer', 'blog', array( 'index', 'adicionar' ) );
   	$this -> _acl -> allow( 'writer', 'auth', 'logout' );
   	$this -> _acl -> allow( 'admin', 'admin', array( 'index', 'adicionar' ) );
}

protected function _saveAcl()
{
   	$registry = Zend_Registry::getInstance();
   	$registry -> set( 'acl', $this -> _acl );
}

}

 

//aplicacao_plugin_auth

<?php

class Aplicacao_Plugin_Auth extends Zend_Controller_Plugin_Abstract
{
/**
	* @var Zend_Auth
	*/
protected $_auth = null;
/**
	* @var Zend_Acl
	*/
protected $_acl = null;
/**
	* @var array
	*/
protected $_notLoggedRoute = array(
   	'controller' => 'auth',
   	'action' 	=> 'login',
   	'module' 	=> 'default'
);
/**
	* @var array
	*/
protected $_forbiddenRoute = array(
   	'controller' => 'error',
   	'action' 	=> 'forbidden',
   	'module' 	=> 'default'
);

public function __construct()
{
   	$this->_auth = Zend_Auth::getInstance();
   	$this->_acl = Zend_Registry::get('acl');
}

public function preDispatch(Zend_Controller_Request_Abstract $request)
{
   	$controller = "";
   	$action 	= "";
   	$module 	= "";
   	if($request->getModuleName()!="default")
   	{
       	if ( !$this->_auth->hasIdentity() ) {
       	$controller = $this->_notLoggedRoute['controller'];
       	$action 	= $this->_notLoggedRoute['action'];
       	$module 	= $this->_notLoggedRoute['module'];
   	} else if ( !$this->_isAuthorized($request->getControllerName(),
               	$request->getActionName()) ) {
       	$controller = $this->_forbiddenRoute['controller'];
       	$action 	= $this->_forbiddenRoute['action'];
       	$module 	= $this->_forbiddenRoute['module'];
   	} else {
       	$controller = $request->getControllerName();
       	$action 	= $request->getActionName();
       	$module 	= $request->getModuleName();
   	}
   	$request->setControllerName($controller);
   	$request->setActionName($action);
   	$request->setModuleName($module);
   	}
}

protected function _isAuthorized($controller, $action)
{
   	$this->_acl = Zend_Registry::get('acl');
   	$user = $this->_auth->getIdentity();
   	if ( !$this->_acl->has( $controller ) || !$this->_acl->isAllowed( $user, $controller, $action ) )
       	return false;
   	return true;
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

acabo de perceber que este metodo nao esta funcionando

 

protected function _isAuthorized( $controller, $action )
{
   	$this -> _acl = Zend_Registry::get( 'acl' );
   	$this -> _auth = Zend_Auth::getInstance();
   	$user = $this -> _auth -> getIdentity();
   	if ( ! $this -> _acl -> has( $controller ) || ! $this -> _acl -> isAllowed( $user, $controller, $action ) )
       	return false;
   	return true;
}

 

nao esta obtendo a instancia do zend auth, nem tirando e nem colocando o get instance ali... :S

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu fui fucando e fucando, dando exit com var dump, e descobri q em algum ponto os dados nao estao sendo gravados na sessao, ele nao esta recuperando a instanco ado zendo auth...ae no plugin ele passa direto...e nao verifica o nivel...

Compartilhar este post


Link para o post
Compartilhar em outros sites

o codigo eh o mesmo do tutorial...so q eu fui fucando e fucando e dando var dump e vi q ele nao esta armazenando os dados, ae chega no plugin pra validar o nivel, da null, ja tentei no serviço e em casa, em abmos os pcs que utilizo, eu uso o zend server CE, sera que isto influencia em alguma coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara... posta o código que você utiliza para autenticar o usuário.

 

Carlos Eduardo

Posta o código que você usa ao autenticar o usuário (no momento do login). Não vou abrir o artigo e procurar o código pra tentar descobrir o que é o problema.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.