[SecurityBundle] Improve the init:acl command
This commit is contained in:
parent
e8094589f0
commit
6d27aecb02
@ -15,6 +15,7 @@ use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
|
|||||||
use Symfony\Component\Security\Acl\Dbal\Schema;
|
use Symfony\Component\Security\Acl\Dbal\Schema;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use Doctrine\DBAL\Schema\SchemaException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Installs the tables required by the ACL system
|
* Installs the tables required by the ACL system
|
||||||
@ -50,26 +51,19 @@ EOT
|
|||||||
*/
|
*/
|
||||||
protected function execute(InputInterface $input, OutputInterface $output)
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
{
|
{
|
||||||
$connection = $this->getContainer()->get('security.acl.dbal.connection');
|
$container = $this->getContainer();
|
||||||
$sm = $connection->getSchemaManager();
|
|
||||||
$tableNames = $sm->listTableNames();
|
|
||||||
$tables = array(
|
|
||||||
'class_table_name' => $this->getContainer()->getParameter('security.acl.dbal.class_table_name'),
|
|
||||||
'sid_table_name' => $this->getContainer()->getParameter('security.acl.dbal.sid_table_name'),
|
|
||||||
'oid_table_name' => $this->getContainer()->getParameter('security.acl.dbal.oid_table_name'),
|
|
||||||
'oid_ancestors_table_name' => $this->getContainer()->getParameter('security.acl.dbal.oid_ancestors_table_name'),
|
|
||||||
'entry_table_name' => $this->getContainer()->getParameter('security.acl.dbal.entry_table_name'),
|
|
||||||
);
|
|
||||||
|
|
||||||
foreach ($tables as $table) {
|
$connection = $container->get('security.acl.dbal.connection');
|
||||||
if (in_array($table, $tableNames, true)) {
|
$schema = $container->get('security.acl.dbal.schema');
|
||||||
$output->writeln(sprintf('The table "%s" already exists. Aborting.', $table));
|
|
||||||
|
|
||||||
return;
|
try {
|
||||||
}
|
$schema->addToSchema($connection->getSchemaManager()->createSchema());
|
||||||
|
} catch (SchemaException $e) {
|
||||||
|
$output->writeln("Aborting: " . $e->getMessage());
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$schema = new Schema($tables, $sm->createSchemaConfig());
|
|
||||||
foreach ($schema->toSql($connection->getDatabasePlatform()) as $sql) {
|
foreach ($schema->toSql($connection->getDatabasePlatform()) as $sql) {
|
||||||
$connection->exec($sql);
|
$connection->exec($sql);
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
<argument key="oid_ancestors_table_name">%security.acl.dbal.oid_ancestors_table_name%</argument>
|
<argument key="oid_ancestors_table_name">%security.acl.dbal.oid_ancestors_table_name%</argument>
|
||||||
<argument key="sid_table_name">%security.acl.dbal.sid_table_name%</argument>
|
<argument key="sid_table_name">%security.acl.dbal.sid_table_name%</argument>
|
||||||
</argument>
|
</argument>
|
||||||
|
<argument type="service" id="security.acl.dbal.connection" />
|
||||||
</service>
|
</service>
|
||||||
<service id="security.acl.dbal.schema_listener" class="%security.acl.dbal.schema_listener.class%" public="false">
|
<service id="security.acl.dbal.schema_listener" class="%security.acl.dbal.schema_listener.class%" public="false">
|
||||||
<argument type="service" id="service_container" />
|
<argument type="service" id="service_container" />
|
||||||
|
@ -13,6 +13,7 @@ namespace Symfony\Component\Security\Acl\Dbal;
|
|||||||
|
|
||||||
use Doctrine\DBAL\Schema\Schema as BaseSchema;
|
use Doctrine\DBAL\Schema\Schema as BaseSchema;
|
||||||
use Doctrine\DBAL\Schema\SchemaConfig;
|
use Doctrine\DBAL\Schema\SchemaConfig;
|
||||||
|
use Doctrine\DBAL\Connection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The schema used for the ACL system.
|
* The schema used for the ACL system.
|
||||||
@ -26,11 +27,13 @@ final class Schema extends BaseSchema
|
|||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
* @param array $options the names for tables
|
* @param array $options the names for tables
|
||||||
* @param SchemaConfig $schemaConfig
|
* @param Connection $connection
|
||||||
*/
|
*/
|
||||||
public function __construct(array $options, SchemaConfig $schemaConfig = null)
|
public function __construct(array $options, Connection $connection = null)
|
||||||
{
|
{
|
||||||
|
$schemaConfig = null === $connection ? null : $connection->getSchemaManager()->createSchemaConfig();
|
||||||
|
|
||||||
parent::__construct(array(), array(), $schemaConfig);
|
parent::__construct(array(), array(), $schemaConfig);
|
||||||
|
|
||||||
$this->options = $options;
|
$this->options = $options;
|
||||||
|
Reference in New Issue
Block a user