plugin para verificação de acesso ACL

Zend_Acl, Zend_Auth, Zend_Session

Moderador: diegotremper

plugin para verificação de acesso ACL

Mensagempor jannier » Ter Out 20, 2009 6:37 pm

Na criação da estrutura do ACL para minha aplicação verifico todos os
acessos a URL por um plugin, minha pergunta é a seguinte:

Caso o usuário não tenha permição a um determinado controller/action
teria como simplesmente mandar uma mensagem pra ele avisando que ele
não tem permissão aquele controller especifico? pois da maneira que
vejo na net o usuário é redirecionando pra uma outra página, nesse
caso não acho legal.
Abraço.

Abaixo o codigo do meu plugin:

Código: Selecionar tudo
<?php
class Polibr_Controller_Plugin_Acl extends
Zend_Controller_Plugin_Abstract {
    protected $_acl = null;

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

    public function preDispatch(Zend_Controller_Request_Abstract
$request) {

        $resource   = $request->getActionName();
        $privilage  = $request->getControllerName();

        $auth = Zend_Auth::getInstance();
        $storageObj = $auth->getStorage()->read();

        if ($auth->hasIdentity()) {

            foreach($storageObj->papeis as $papel) {
                $papeis[] = $papel['s_papeis'];
            }

            try {
                if (!$this->_acl->has($privilage)) {
                    throw new Zend_Exception('Recurso não encontrado:
'.$privilage);
                }

                $i = 0;
                if(!$this->_acl->isAllowed($papeis[$i], $privilage,
$resource)) {
                    $redirector =
Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');
                    $redirector->gotoUrlAndExit('/index/sem-
permissao');
                }
            }catch (Zend_Exception $e) {
                                echo $e->getMessage();
            }
            catch(Zend_Acl_Exception $e) {
                echo $e->getMessage();
            }
        }
    }
jannier
Leitor
 
Mensagens: 3
Data de registro: Seg Jul 28, 2008 1:55 pm

Re: plugin para verificação de acesso ACL

Mensagempor danieldeveloper » Qua Out 21, 2009 10:29 am

Cara, apenas seto o controller e a action, assim:

Código: Selecionar tudo
if ( !$this->_acl->isAllowed( $role, $resource, $privilege ) ) :

                $request->setModuleName( 'app' );
                $request->setControllerName( 'error' );
                $request->setActionName( 'denied' );
            endif;


Claro, com isso vc tem que criar um ErrorController e uma deniedAction...

Aí na denied.phtml vc coloca a mensagem que vc quer tipo:
<h1>Acesso negado</h1>
<p>Você não tem permissão para acessar esta página.</p>

É isso, abs!
danieldeveloper.com
danieldeveloper
Participante
 
Mensagens: 45
Data de registro: Sex Mai 08, 2009 11:31 am


Retornar para Autenticação e Autorização

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes