[Resolvido] Zend_Acl e controle de acesso para Controller's

Zend_Acl, Zend_Auth, Zend_Session

Moderador: diegotremper

[Resolvido] Zend_Acl e controle de acesso para Controller's

Mensagempor kaleu » Ter Ago 19, 2008 9:41 am

Olá pessoal..
Criei uma Lista de controle de acesso (Acl)..criei algumas permissões, regras, etc..

E gostaria de aplicar uma regra simples para definir se um usuário pode ou acessar as funcionalidades de um Controller específico..
por exemplo, admUsuarios.

Pensei em usar essa regra no "init()" efetuando "redirect" caso o usuário não possa acessar a classe..mas bem, não funciona. E me parece que deve ter outro jeito...

a dúvida geral é:
Como posso fazer para que um usuário não tenha acesso a todas as actions de um controller sem precisar colocar a regra em todos os controlers individualmente?

Se alguém puder ajudar..agradeço..
kaleu
Membro
 
Mensagens: 16
Data de registro: Seg Jun 30, 2008 11:14 am
Localização: Florianópolis, SC

Re: Zend_Acl e controle de acesso para Controller's

Mensagempor kaleu » Ter Ago 19, 2008 9:49 am

Acabei de descobrir que utilizando "_forward" ao invés de "_redirect" funciona corretamente.

Assim funciona...
Código: Selecionar tudo
public function init()
   {
      $session = Zend_Registry::get("session");
      $acl = Zend_Registry::get("acl");
      if(isset($session->usuario))
      {
         if(!$acl->isAllowed($session->usuario["tipoDeUsuario"], "paginaUsuarios"))
            $this->_forward("erro");
      }
      else
         $this->_forward("erro");
   }


Se souberem uma forma melhor..agradeço..
kaleu
Membro
 
Mensagens: 16
Data de registro: Seg Jun 30, 2008 11:14 am
Localização: Florianópolis, SC

Re: Zend_Acl e controle de acesso para Controller's

Mensagempor iagoeiro » Qua Ago 20, 2008 10:00 am

Prezado kaleu,

Uma boa solução para esse caso é o uso de um plugin veja mais detalhes sobre:
http://framework.zend.com/manual/en/zend.controller.plugins.html

Aqui tem um tutorial bem legal do Blog do Tremper falando sobre isso.
http://blog.diegotremper.com/archives/34

Abraços
Israel Agoeiro
iagoeiro
Participante
 
Mensagens: 94
Data de registro: Seg Fev 25, 2008 1:38 am

Re: Zend_Acl e controle de acesso para Controller's

Mensagempor kaleu » Qui Ago 21, 2008 9:39 am

Bastante interessante..

só uma dúvida,
como eu associo um plugin a um controller específico??

é possível?

Obrigado.
kaleu
Membro
 
Mensagens: 16
Data de registro: Seg Jun 30, 2008 11:14 am
Localização: Florianópolis, SC

Re: Zend_Acl e controle de acesso para Controller's

Mensagempor iagoeiro » Qui Ago 21, 2008 11:10 am

Kaleu, por favor de um exemplo do que está querendo fazer, assim eu conseguirei entender e ver se o que pretende já não está sendo feito pelo controller.

Israel Agoeiro
iagoeiro
Participante
 
Mensagens: 94
Data de registro: Seg Fev 25, 2008 1:38 am

Re: Zend_Acl e controle de acesso para Controller's

Mensagempor diegotremper » Sex Ago 22, 2008 12:50 am

detro de seu plugin você pode descobrir qual o controller que irá receber o request e determinar dua lógica
Código: Selecionar tudo
class MyPlugin extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        if ($request->getControllerName() == 'controllerEspecifico') {
              //regra específica
        } else {
             // regra geral
        }

    }
}


[]'s
Avatar de usuário
diegotremper
Administrador
 
Mensagens: 125
Data de registro: Qua Jan 02, 2008 10:08 pm
Localização: Porto Alegre - RS

Re: Zend_Acl e controle de acesso para Controller's

Mensagempor Fabio_Floripa » Ter Out 27, 2009 7:47 am

Olá amigos
estou com um problema no plugin
fiz o mesmo esquema que o diego ali falou do plugin
mas nao consigo acessar as variaveis da sessao
usando o Zend_Registry::get()
acredito que no preDispatch
a sessao nao tenha sido startada correto?
o que posso fazer para usar a sessao ali sem ser o Zend_Registry?
Fabio_Floripa
Membro
 
Mensagens: 6
Data de registro: Qua Out 21, 2009 3:48 pm

Re: Zend_Acl e controle de acesso para Controller's

Mensagempor vdsantos » Ter Out 27, 2009 9:50 am

Kra,
Eu nunca usei o Zend_Registry para a sessão, sempre usei direto o Zend_Session_Namespace para esse tipo de controle mas, talvez isso funcione:

Código: Selecionar tudo
/** Inicia a sessão global */
Zend_Session::start();

/** Cria o manipulador da sessão */
Zend_Registry::set('session', new Zend_Session_Namespace("global"));


Na hora de recuperar a sessão:
Código: Selecionar tudo
$this->sessao = ZendRegistry::get("session");


e para usar:
Código: Selecionar tudo
$this->sessao->global->algumValor = $algumValor;


Eu não testei esse tipo de notação mas talvez funcione, senão, seria melhor passar a utilizar o Zend_Session_Namespace diretamente dentro do seu controle de inicialização:
Código: Selecionar tudo
public $sessão; 
$this->sessao = new Zend_Session_Namespace("global");
$this->sessao->algumValor = $algumValor;


E para recuperar pode fazer dessa forma:
Código: Selecionar tudo
$sessão = new Zend_Session_Namespace('global');
$Algum valor = $sessão->__get('algumValor');


Espero que tenha ajudado em algo.
Valew
vdsantos
Participante
 
Mensagens: 53
Data de registro: Seg Jun 08, 2009 2:38 pm
Localização: Guarulhos - SP

Re: Zend_Acl e controle de acesso para Controller's

Mensagempor Fabio_Floripa » Ter Out 27, 2009 3:32 pm

valew amigo, deu certinho, muito obrigado
Fabio_Floripa
Membro
 
Mensagens: 6
Data de registro: Qua Out 21, 2009 3:48 pm


Retornar para Autenticação e Autorização

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante

cron