Ir para conteúdo

POWERED BY:

Arquivado

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

DaRkShAfT

Zend_Acl + Zend_Navigation

Recommended Posts

Oi,

 

Estou dando em doido! :angry:

 

Eu estou tentando criar o Zend_Acl dinâmico, ou seja, a partir de resources guardados no banco.

 

No entanto estou com um problema por causa do Zend_Navigation, vou dar um exemplo do código que estou a produzir:

 

navigation.xml

<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<nav>
	<settings>
		<label>Configurações</label>
		<menu>sideNav</menu>
		<uri>#</uri>
		<resource>settings</resource>
		<pages>
			<sitesettings>
				<label>Site</label>
				<module>admin</module>
				<controller>settings</controller>
				<action>site</action>
				<resource>site:settings</resource>
			</sitesettings>
			<adminsettings>
				<label>Admin</label>
				<module>admin</module>
				<controller>settings</controller>
				<action>admin</action>
				<resource>admin:settings</resource>
			</adminsettings>
		</pages>
	</settings>
</nav>
</configdata>

 

está correcto assim?

 

agora no meu acl eu vou declarar o seguinte:

$this->addRole( new Zend_Acl_Role( 'admin') );

$this->add( new Zend_Acl_Resource( 'settings' ) );
$this->add( new Zend_Acl_Resource( 'site' ), 'settings' );
$this->add( new Zend_Acl_Resource( 'admin' ), 'settings' );

// Até aqui está tudo ok? Eu penso que sim... Eu estou a colocar resource no site e admin porque eu em muitos casos vou ter mais dependências...

$this->allow( 'admin', 'settings' ); // Aqui começa o meu problema!

 

Atenção o problema não está no acesso ao resources, aqui consoante os acessos que eu dou, é onde o user admin consegue aceder...

 

O problema está quando faço o echo $this->navigation()->menu()->render(), neste caso ele funciona e apresenta-me o menu correcto, no entanto se eu acrescentar isto ao código:

$this->allow( 'admin', 'settings', 'site' ); // Aqui começa o meu problema!

 

ele supostamente era para apresentar:

<ul>
 <li>Configurações
   <ul>
     <li>Site</li>
   </ul>
 </li>
</ul>

 

e ele não me apresenta nada! no entanto se não colocar o param 'site', ele apresenta tudo!

<ul>
 <li>Configurações
   <ul>
     <li>Site</li>
     <li>Admin</li>
   </ul>
 </li>
</ul>

 

Conclusão, eu consigo criar regras para os utilizadores, no entanto no zend_navigation não consigo fazer com que essas regras sejam obedecidas na totalidade...

 

Se eu quiser dar autorização total para Configurações, o zend_navigation corre 100%, no entanto seu eu der somente autorização para Configurações>Site, o zend_navigation não me mostra o menu Configurações!

 

Supostamente não era para mostrar o menu Configurações só com a opção Site?

 

Preciso mm de uma grande ajuda!!

 

[]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi,

 

Já resolvi o problema!!

 

Tinha um erro no código, e acho que já estou a compreender melhor os resources/privileges! :joia:

 

Agora precisava era de uma idéia... Eu queria fazer um mapa(tree view) com checkboxs para dar acesso a um determinado utilizador.

 

No entanto queria discutir a melhor forma de guardar essa info num campo da tabela users(acl_resources), para depois ler e atribuir os acessos quando o user faz login!

 

Alguém me ajuda? ;)

 

Oi,

 

Já resolvi o problema!!

 

Tinha um erro no código, e acho que já estou a compreender melhor os resources/privileges! :joia:

 

Agora precisava era de uma idéia... Eu queria fazer um mapa(tree view) com checkboxs para dar acesso a um determinado utilizador.

 

No entanto queria discutir a melhor forma de guardar essa info num campo da tabela users(acl_resources), para depois ler e atribuir os acessos quando o user faz login!

 

Alguém me ajuda? ;)

 

Nem mais, guardar tudo num array multi-dimensional e serializar o mesmo para guardar na bd! :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você primeiro deve realizar toda a configuração do Zend_Acl e no navigation você deve somente inserir as regras após configurado.

 

$acl = new Zend_Acl();

$this->view->acl = $acl;
Out................

//Dentro da View
$this->navigation()->setAcl($this->acl);

Ou

//Bootstrap
$view->navigation()->setAcl($acl);

Ou

//Controller
$this->view->navigation()->setAcl($acl);

 

Esqueci do Exemplo:

 

 

   //Bootstrap
   protected function _initNavigation()
   {
       $this->bootstrap('layout');
       $layout = $this->getResource('layout');
       $view = $layout->getView();

       $navConfig = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
       $navigation = new Zend_Navigation($navConfig);

       $view->navigation($navigation)->setAcl($this->_acl)
                                     ->setRole($this->_auth->getStorage()->read()->role);

   }

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.