Pergunta

Ei, eu estou começando com Zend, e tentar compreender a forma como ele funciona (chegar lá), e com classes de LCA, as pessoas parecem declarar todas as funções e recursos em um arquivo. Agora, para mim isso parece um pouco de um desperdício de recursos do sistema se a pessoa só é login como um usuário básico, ou mesmo apenas um convidado / visitante do site. Então eu estava pensando é possível ter diferentes classes que definem os papéis dependentes do papel / recurso do usuário atual.

Minha idéia atual é usar switch / case sobre o papel na inicialização e carregar classes Acl individuais com base no nome da função (por exemplo, causa, 'visitante' => 'Model_VisitorAcl', 'usuários' => 'Model_UserAcl 'e 'admin'=> 'Model_AdminAcl'), cada um com um arquivo de classe correspondente. Em seguida, dentro dos arquivos de classe fazer algo para cada um. Isso está funcionando, e atualmente eu poderia definir todos os meus acls 'admin' em um (retrocesso através da hierarquia direitos de admin-user-visitante), em seguida, em 'user' tem 'user' -. 'Visitante' papéis e recursos

No entanto, este não parece o melhor caminho, como se eu queria mudar as permissões de função para 'usuário' eu preciso mudá-lo para 'user' e 'admin'. Esta é obv não é um problema com 2 papéis, mas em sistemas maiores, obviamente, é.

Então, eu tentei algo como

class Model_AdminAcl extends Zend_Acl{
  function __construct(){
    $d = new Model_UserAcl();

    //defining the admin role and permissions, with inheritance from the roles 
    //set in Model_UserAcl
  }
}

Para tentar obter a função de construção Model_UserAcl para executar, estabelecendo, assim, o papel 'user', no entanto, isso não parece trabalho, jogando "exceção Uncaught 'Zend_Acl_Role_Registry_Exception' com usuários de mensagens 'Pai Papel id '' não existe' " erro.

Então, qual o próximo passo? Tendo indivíduo incluem arquivos para cada módulo, e ter as aulas obrigatórias incluem-los quando necessário?

Ou estou apenas fazendo montanha fora de montículos com esta questão?

Obrigado, Psy

Foi útil?

Solução

Ok, resolvido isso, não tenho certeza por isso que eu não acho que tentar isso em primeiro lugar (frazzle cérebro sexta-feira eu acho)

Acabei de colocar o conteúdo do construtor em sua própria função, e então chamou essa função no construtor, e fazer as classes herdam da classe abaixo dela.

//Model/VisitorAcl.php
class Model_VisitorAcl extends Zend_Acl{
  function __construct(){
    $this->addVisitorRules();
  }

  function addVisitorRules(){
    //adding the role and permissions
  }
}

//Model/UserAcl.php
class Model_UserAcl extends Model_VisitorAcl{
  function __construct(){
    $this->addVisitorRules();
    $this->addUserRules();
  }

  function addUserRules(){
    //adding the role and permissions
  }
}

//Model/AdminAcl.php
class Model_AdminAcl extends Model_AdminAcl{
  function __construct(){
    $this->addVisitorRules();
    $this->addUserRules();
    $this->addAdminRules();
  }

  function addAdminRules(){
    //adding the role and permissions
  }
}

Se este não é o caminho que devo seguir sobre isso, então por todos os meios, por favor me avise.

Psy

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top