10 de maio de 2010

Desproteger acção de módulo do admin-generator

Nota: Dica para symfony 1.2.9

Os módulos criados a partir do admin-generator estão protegidos por default.

No entanto, pode por vezes haver necessidade em desproteger uma determinada acção. Para tal, o ideal seria editar o generator.yml e o security.yml como se faz num módulo não-admin-generated.. Mas o facto é que isso não funciona porque em todos os módulos do admin generator há uma pre-execução de uma função que força a que o utilizador tenha credenciais de administrador:

public function preExecute()
{
  $this->configuration = new moduleGeneratorConfiguration();
  if (!$this->getUser()->hasCredential($this->configuration->getCredentials($this->getActionName())))
  {
    $this->forward(sfConfig::get('sf_secure_module'), sfConfig::get('sf_secure_action'));
  }
  // ...
}

Hack possível para solucionar este problema

No actions.class.php do módulo, colar a função do preExecute das autoActions (semelhante à função acima) e desproteger as acções pretendidas. Exemplo:

public function preExecute()
{
  $this->configuration = new oemproGeneratorConfiguration();

  $action = $this->getActionName();
  if ($action == 'accaoNumeroUm' || $action == 'accaoNumeroDois')
  {
  } else {
    if (!$this->getUser()->hasCredential($this->configuration->getCredentials($this->getActionName())))
    {
      $this->forward(sfConfig::get('sf_secure_module'), sfConfig::get('sf_secure_action'));
    }
  }
  // ...
}

Confesso que não é a solução mais bonita, mas pelo menos funciona :)