*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Sonata\AdminBundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Output\Output;
use Symfony\Component\Security\Acl\Domain\ObjectIdentity;
use Sonata\AdminBundle\Util\AdminAclManipulatorInterface;
use Sonata\AdminBundle\Admin\AdminInterface;
class SetupAclCommand extends ContainerAwareCommand
{
/**
* {@inheritDoc}
*/
public function configure()
{
$this->setName('sonata:admin:setup-acl');
$this->setDescription('Install ACL for Admin Classes');
}
/**
* {@inheritDoc}
*/
public function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln('Starting ACL AdminBundle configuration');
foreach ($this->getContainer()->get('sonata.admin.pool')->getAdminServiceIds() as $id) {
try {
$admin = $this->getContainer()->get($id);
} catch (\Exception $e) {
$output->writeln('Warning : The admin class cannot be initiated from the command line');
$output->writeln(sprintf('%s', $e->getMessage()));
continue;
}
$manipulator = $this->getContainer()->get('sonata.admin.manipulator.acl.admin');
if (!$manipulator instanceof AdminAclManipulatorInterface) {
$output->writeln(sprintf('The interface "AdminAclManipulatorInterface" is not implemented for %s: ignoring', get_class($manipulator)));
continue;
}
$manipulator->configureAcls($output, $admin);
}
}
}