Zend_Acl foi projetado de uma maneira que não requer nenhuma
            teconologia de backend em particular, como um banco de dados ou servidor de cache, para
            armazenamento de dados ACL. Sua implementação completamente em
            PHP permite que ferramentas personalizadas de admnistração sejam
            construídas sob Zend_Acl com relativa facilidade e flexibilidade.
            Muitas situações necessitam de alguma forma de manutenção da ACL e
            Zend_Acl fornece métodos para estabelecer e consultar os
            controles de acesso de uma aplicação.
        
            O armazenamento dos dados da ACL é uma tarefa deixada para o
            desenvolvedor, visto que espera-se que os casos de uso possam variar muito de acordo com
            situações diversas. Por conta de Zend_Acl ser serializável,
            objetos ACL podem ser serializados com a função
            serialize() do
            PHP e o resultado pode ser armazenado em qualquer lugar que o
            desenvolvedor desejar, como um arquivo, banco de dados ou mecanismo de cache.
        
            Algumas vezes uma regra para permitir ou negar acesso de um papel a um recurso não deve
            ser absoluta, mas dependente de vários critérios. Por exemplo, suponha que certo acesso
            deva ser liberado, mas somente entre o horário entre 8h00 e 17h00. Outro exemplo seria
            negar um acesso por conta de uma requisição vinda de um IP que foi
            identificado como fonte de abuso. Zend_Acl foi construído para
            suportar a implementação de regras baseadas em quaisquer condições que o desenvolvedor
            necessitar.
        
            Zend_Acl fornece suporte para regras condicionais com
            Zend_Acl_Assert_Interface. Para utilizar a interface de asserção
            de regra, o desenvolvedor escreve uma classe que implemente o método
            assert() da interface:
        
class CleanIPAssertion implements Zend_Acl_Assert_Interface
{
    public function assert(Zend_Acl $acl,
                           Zend_Acl_Role_Interface $role = null,
                           Zend_Acl_Resource_Interface $resource = null,
                           $privilege = null)
    {
        return $this->_isCleanIP($_SERVER['REMOTE_ADDR']);
    }
    protected function _isCleanIP($ip)
    {
        // ...
    }
}
        
            Uma vez que uma classe de asserção está disponível, o desenvolvedor deve fornecer uma
            instância de classe de asserção ao atribuir regras condicionais. Uma regra criada com
            uma asserção somente se aplica quando o método de asserção retorna
            TRUE.
        
$acl = new Zend_Acl(); $acl->allow(null, null, null, new CleanIPAssertion());
O código acima cria uma regra condicional que permite acesso a todos os priviégios, para tudo e para todos, exceto quando o IP solicitante está em uma "lista negra". Se a requisição vem de um IP que não é considerado "confiável" a regra não se aplicará. Um vez que a regra se aplica a todos os papéis, todos os recursos e todos os privilégios, um IP "não confiável" resultará em uma recusa de acesso. Contudo, este é um caso especial, e deve ser entendido que para todos os outros casos (ex., quando um papel específico, recurso ou privilégio é especificado para a regra), um asserção falsa resultará na regra não sendo aplicada, e outras regras serão utilizadas para determinar se o acesso é permitido ou negado.
            Ao método assert() de um objeto de asserção é passada a
            ACL, o papel, recurso e privilégio de que a consulta de autorização
            (ex., isAllowed()) se aplica, a fim de fornecer um contexto
            para que a classe de asserção possa determinar se suas condições são necessárias.