This PR was squashed before being merged into the 3.4 branch (closes #23801).
Discussion
----------
Continuation of #23624
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | yes
| BC breaks? | no
| Deprecations? | yes
| Tests pass? | yes
| Fixed tickets | #... <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | symfony/symfony-docs#... <!--highly recommended for new features-->
See https://github.com/symfony/symfony/pull/23624#discussion_r131539736
cc @chalasr
Also included service injection for init:acl + set:acl and simplification of lint:xliff + lintt:yaml.
Btw, i think init:acl needs to be renamed to acl:init :)
Commits
-------
5f637c1
Continuation of #23624
This commit is contained in:
commit
266d9d375e
@ -33,16 +33,16 @@ class DebugCommand extends Command
|
||||
*/
|
||||
public function __construct($twig = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!$twig instanceof Environment) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$this->setName(null === $twig ? 'debug:twig' : $twig);
|
||||
parent::__construct($twig);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->twig = $twig;
|
||||
}
|
||||
|
||||
|
@ -38,16 +38,16 @@ class LintCommand extends Command
|
||||
*/
|
||||
public function __construct($twig = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!$twig instanceof Environment) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$this->setName(null === $twig ? 'lint:twig' : $twig);
|
||||
parent::__construct($twig);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->twig = $twig;
|
||||
}
|
||||
|
||||
|
@ -42,16 +42,16 @@ class AssetsInstallCommand extends ContainerAwareCommand
|
||||
*/
|
||||
public function __construct($filesystem = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!$filesystem instanceof Filesystem) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$this->setName(null === $filesystem ? 'assets:install' : $filesystem);
|
||||
parent::__construct($filesystem);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->filesystem = $filesystem;
|
||||
}
|
||||
|
||||
|
@ -39,16 +39,16 @@ class CacheClearCommand extends ContainerAwareCommand
|
||||
*/
|
||||
public function __construct($cacheClearer = null, Filesystem $filesystem = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!$cacheClearer instanceof CacheClearerInterface) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$this->setName(null === $cacheClearer ? 'cache:clear' : $cacheClearer);
|
||||
parent::__construct($cacheClearer);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->cacheClearer = $cacheClearer;
|
||||
$this->filesystem = $filesystem ?: new Filesystem();
|
||||
}
|
||||
|
@ -32,16 +32,16 @@ final class CachePoolClearCommand extends ContainerAwareCommand
|
||||
*/
|
||||
public function __construct($poolClearer = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!$poolClearer instanceof Psr6CacheClearer) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$this->setName(null === $poolClearer ? 'cache:pool:clear' : $poolClearer);
|
||||
parent::__construct($poolClearer);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->poolClearer = $poolClearer;
|
||||
}
|
||||
|
||||
|
@ -33,16 +33,16 @@ class CacheWarmupCommand extends ContainerAwareCommand
|
||||
*/
|
||||
public function __construct($cacheWarmer = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!$cacheWarmer instanceof CacheWarmerAggregate) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$this->setName(null === $cacheWarmer ? 'cache:warmup' : $cacheWarmer);
|
||||
parent::__construct($cacheWarmer);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->cacheWarmer = $cacheWarmer;
|
||||
}
|
||||
|
||||
|
@ -35,16 +35,16 @@ class EventDispatcherDebugCommand extends ContainerAwareCommand
|
||||
*/
|
||||
public function __construct($dispatcher = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!$dispatcher instanceof EventDispatcherInterface) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$this->setName(null === $dispatcher ? 'debug:event-dispatcher' : $dispatcher);
|
||||
parent::__construct($dispatcher);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->dispatcher = $dispatcher;
|
||||
}
|
||||
|
||||
|
@ -39,16 +39,16 @@ class RouterDebugCommand extends ContainerAwareCommand
|
||||
*/
|
||||
public function __construct($router = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!$router instanceof RouterInterface) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$this->setName(null === $router ? 'debug:router' : $router);
|
||||
parent::__construct($router);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->router = $router;
|
||||
}
|
||||
|
||||
|
@ -36,16 +36,16 @@ class RouterMatchCommand extends ContainerAwareCommand
|
||||
*/
|
||||
public function __construct($router = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!$router instanceof RouterInterface) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$this->setName(null === $router ? 'router:match' : $router);
|
||||
parent::__construct($router);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->router = $router;
|
||||
}
|
||||
|
||||
|
@ -36,14 +36,14 @@ use Symfony\Component\Translation\TranslatorInterface;
|
||||
*/
|
||||
class TranslationDebugCommand extends ContainerAwareCommand
|
||||
{
|
||||
private $translator;
|
||||
private $loader;
|
||||
private $extractor;
|
||||
|
||||
const MESSAGE_MISSING = 0;
|
||||
const MESSAGE_UNUSED = 1;
|
||||
const MESSAGE_EQUALS_FALLBACK = 2;
|
||||
|
||||
private $translator;
|
||||
private $loader;
|
||||
private $extractor;
|
||||
|
||||
/**
|
||||
* @param TranslatorInterface $translator
|
||||
* @param TranslationLoader $loader
|
||||
@ -51,16 +51,16 @@ class TranslationDebugCommand extends ContainerAwareCommand
|
||||
*/
|
||||
public function __construct($translator = null, TranslationLoader $loader = null, ExtractorInterface $extractor = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!$translator instanceof TranslatorInterface) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$this->setName(null === $translator ? 'debug:translation' : $translator);
|
||||
parent::__construct($translator);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->translator = $translator;
|
||||
$this->loader = $loader;
|
||||
$this->extractor = $extractor;
|
||||
|
@ -46,16 +46,16 @@ class TranslationUpdateCommand extends ContainerAwareCommand
|
||||
*/
|
||||
public function __construct($writer = null, TranslationLoader $loader = null, ExtractorInterface $extractor = null, $defaultLocale = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!$writer instanceof TranslationWriter) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$this->setName(null === $writer ? 'translation:update' : $writer);
|
||||
parent::__construct($writer);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->writer = $writer;
|
||||
$this->loader = $loader;
|
||||
$this->extractor = $extractor;
|
||||
|
@ -11,9 +11,6 @@
|
||||
|
||||
namespace Symfony\Bundle\FrameworkBundle\Command;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Translation\Command\XliffLintCommand as BaseLintCommand;
|
||||
|
||||
/**
|
||||
@ -25,39 +22,41 @@ use Symfony\Component\Translation\Command\XliffLintCommand as BaseLintCommand;
|
||||
*
|
||||
* @final since version 3.4
|
||||
*/
|
||||
class XliffLintCommand extends Command
|
||||
class XliffLintCommand extends BaseLintCommand
|
||||
{
|
||||
private $command;
|
||||
public function __construct($name = null, $directoryIteratorProvider = null, $isReadableProvider = null)
|
||||
{
|
||||
if (func_num_args()) {
|
||||
@trigger_error(sprintf('Passing a constructor argument in "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
if (null === $directoryIteratorProvider) {
|
||||
$directoryIteratorProvider = function ($directory, $default) {
|
||||
if (!is_dir($directory)) {
|
||||
$directory = $this->getApplication()->getKernel()->locateResource($directory);
|
||||
}
|
||||
|
||||
return $default($directory);
|
||||
};
|
||||
}
|
||||
|
||||
if (null === $isReadableProvider) {
|
||||
$isReadableProvider = function ($fileOrDirectory, $default) {
|
||||
return 0 === strpos($fileOrDirectory, '@') || $default($fileOrDirectory);
|
||||
};
|
||||
}
|
||||
|
||||
parent::__construct($name, $directoryIteratorProvider, $isReadableProvider);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('lint:xliff');
|
||||
parent::configure();
|
||||
|
||||
if (!$this->isEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$directoryIteratorProvider = function ($directory, $default) {
|
||||
if (!is_dir($directory)) {
|
||||
$directory = $this->getApplication()->getKernel()->locateResource($directory);
|
||||
}
|
||||
|
||||
return $default($directory);
|
||||
};
|
||||
|
||||
$isReadableProvider = function ($fileOrDirectory, $default) {
|
||||
return 0 === strpos($fileOrDirectory, '@') || $default($fileOrDirectory);
|
||||
};
|
||||
|
||||
$this->command = new BaseLintCommand(null, $directoryIteratorProvider, $isReadableProvider);
|
||||
|
||||
$this
|
||||
->setDescription($this->command->getDescription())
|
||||
->setDefinition($this->command->getDefinition())
|
||||
->setHelp($this->command->getHelp().<<<'EOF'
|
||||
$this->setHelp($this->getHelp().<<<'EOF'
|
||||
|
||||
Or find all files in a bundle:
|
||||
|
||||
@ -66,17 +65,4 @@ Or find all files in a bundle:
|
||||
EOF
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function isEnabled()
|
||||
{
|
||||
return class_exists(BaseLintCommand::class);
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
return $this->command->execute($input, $output);
|
||||
}
|
||||
}
|
||||
|
@ -11,9 +11,6 @@
|
||||
|
||||
namespace Symfony\Bundle\FrameworkBundle\Command;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Yaml\Command\LintCommand as BaseLintCommand;
|
||||
|
||||
/**
|
||||
@ -24,39 +21,41 @@ use Symfony\Component\Yaml\Command\LintCommand as BaseLintCommand;
|
||||
*
|
||||
* @final since version 3.4
|
||||
*/
|
||||
class YamlLintCommand extends Command
|
||||
class YamlLintCommand extends BaseLintCommand
|
||||
{
|
||||
private $command;
|
||||
public function __construct($name = null, $directoryIteratorProvider = null, $isReadableProvider = null)
|
||||
{
|
||||
if (func_num_args()) {
|
||||
@trigger_error(sprintf('Passing a constructor argument in "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
if (null === $directoryIteratorProvider) {
|
||||
$directoryIteratorProvider = function ($directory, $default) {
|
||||
if (!is_dir($directory)) {
|
||||
$directory = $this->getApplication()->getKernel()->locateResource($directory);
|
||||
}
|
||||
|
||||
return $default($directory);
|
||||
};
|
||||
}
|
||||
|
||||
if (null === $isReadableProvider) {
|
||||
$isReadableProvider = function ($fileOrDirectory, $default) {
|
||||
return 0 === strpos($fileOrDirectory, '@') || $default($fileOrDirectory);
|
||||
};
|
||||
}
|
||||
|
||||
parent::__construct($name, $directoryIteratorProvider, $isReadableProvider);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('lint:yaml');
|
||||
parent::configure();
|
||||
|
||||
if (!$this->isEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$directoryIteratorProvider = function ($directory, $default) {
|
||||
if (!is_dir($directory)) {
|
||||
$directory = $this->getApplication()->getKernel()->locateResource($directory);
|
||||
}
|
||||
|
||||
return $default($directory);
|
||||
};
|
||||
|
||||
$isReadableProvider = function ($fileOrDirectory, $default) {
|
||||
return 0 === strpos($fileOrDirectory, '@') || $default($fileOrDirectory);
|
||||
};
|
||||
|
||||
$this->command = new BaseLintCommand(null, $directoryIteratorProvider, $isReadableProvider);
|
||||
|
||||
$this
|
||||
->setDescription($this->command->getDescription())
|
||||
->setDefinition($this->command->getDefinition())
|
||||
->setHelp($this->command->getHelp().<<<'EOF'
|
||||
$this->setHelp($this->getHelp().<<<'EOF'
|
||||
|
||||
Or find all files in a bundle:
|
||||
|
||||
@ -65,17 +64,4 @@ Or find all files in a bundle:
|
||||
EOF
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function isEnabled()
|
||||
{
|
||||
return class_exists(BaseLintCommand::class) && parent::isEnabled();
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
return $this->command->execute($input, $output);
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,8 @@ use Symfony\Bundle\FrameworkBundle\Command\RouterMatchCommand;
|
||||
use Symfony\Bundle\FrameworkBundle\Command\TranslationDebugCommand;
|
||||
use Symfony\Bundle\FrameworkBundle\Command\TranslationUpdateCommand;
|
||||
use Symfony\Bundle\FrameworkBundle\Command\WorkflowDumpCommand;
|
||||
use Symfony\Bundle\FrameworkBundle\Command\XliffLintCommand;
|
||||
use Symfony\Bundle\FrameworkBundle\Command\YamlLintCommand;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Bundle\FrameworkBundle\Routing\AnnotatedRouteControllerLoader;
|
||||
@ -69,10 +71,12 @@ use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
|
||||
use Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer;
|
||||
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
||||
use Symfony\Component\Stopwatch\Stopwatch;
|
||||
use Symfony\Component\Translation\Command\XliffLintCommand as BaseXliffLintCommand;
|
||||
use Symfony\Component\Validator\ConstraintValidatorInterface;
|
||||
use Symfony\Component\Validator\ObjectInitializerInterface;
|
||||
use Symfony\Component\WebLink\HttpHeaderSerializer;
|
||||
use Symfony\Component\Workflow;
|
||||
use Symfony\Component\Yaml\Command\LintCommand as BaseYamlLintCommand;
|
||||
|
||||
/**
|
||||
* FrameworkExtension.
|
||||
@ -128,6 +132,13 @@ class FrameworkExtension extends Extension
|
||||
|
||||
if (class_exists(Application::class)) {
|
||||
$loader->load('console.xml');
|
||||
|
||||
if (!class_exists(BaseXliffLintCommand::class)) {
|
||||
$container->removeDefinition(XliffLintCommand::class);
|
||||
}
|
||||
if (!class_exists(BaseYamlLintCommand::class)) {
|
||||
$container->removeDefinition(YamlLintCommand::class);
|
||||
}
|
||||
}
|
||||
|
||||
// Property access is used by both the Form and the Validator component
|
||||
|
@ -14,6 +14,8 @@ namespace Symfony\Bundle\SecurityBundle\Command;
|
||||
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Security\Acl\Dbal\Schema;
|
||||
use Doctrine\DBAL\Connection;
|
||||
use Doctrine\DBAL\Schema\SchemaException;
|
||||
|
||||
/**
|
||||
@ -25,12 +27,37 @@ use Doctrine\DBAL\Schema\SchemaException;
|
||||
*/
|
||||
class InitAclCommand extends ContainerAwareCommand
|
||||
{
|
||||
private $connection;
|
||||
private $schema;
|
||||
|
||||
/**
|
||||
* @param Connection $connection
|
||||
* @param Schema $schema
|
||||
*/
|
||||
public function __construct($connection = null, Schema $schema = null)
|
||||
{
|
||||
if (!$connection instanceof Connection) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
parent::__construct($connection);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->connection = $connection;
|
||||
$this->schema = $schema;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* BC to be removed in 4.0
|
||||
*/
|
||||
public function isEnabled()
|
||||
{
|
||||
if (!$this->getContainer()->has('security.acl.dbal.connection')) {
|
||||
if (!$this->connection && !$this->getContainer()->has('security.acl.dbal.connection')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -65,21 +92,22 @@ EOF
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$container = $this->getContainer();
|
||||
|
||||
$connection = $container->get('security.acl.dbal.connection');
|
||||
$schema = $container->get('security.acl.dbal.schema');
|
||||
// BC to be removed in 4.0
|
||||
if (null === $this->connection) {
|
||||
$this->connection = $this->getContainer()->get('security.acl.dbal.connection');
|
||||
$this->schema = $this->getContainer()->get('security.acl.dbal.schema');
|
||||
}
|
||||
|
||||
try {
|
||||
$schema->addToSchema($connection->getSchemaManager()->createSchema());
|
||||
$this->schema->addToSchema($this->connection->getSchemaManager()->createSchema());
|
||||
} catch (SchemaException $e) {
|
||||
$output->writeln('Aborting: '.$e->getMessage());
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
foreach ($schema->toSql($connection->getDatabasePlatform()) as $sql) {
|
||||
$connection->exec($sql);
|
||||
foreach ($this->schema->toSql($this->connection->getDatabasePlatform()) as $sql) {
|
||||
$this->connection->exec($sql);
|
||||
}
|
||||
|
||||
$output->writeln('ACL tables have been initialized successfully.');
|
||||
|
@ -32,11 +32,36 @@ use Symfony\Component\Security\Acl\Model\MutableAclProviderInterface;
|
||||
*/
|
||||
class SetAclCommand extends ContainerAwareCommand
|
||||
{
|
||||
private $provider;
|
||||
|
||||
/**
|
||||
* @param MutableAclProviderInterface $provider
|
||||
*/
|
||||
public function __construct($provider = null)
|
||||
{
|
||||
if (!$provider instanceof MutableAclProviderInterface) {
|
||||
@trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
parent::__construct($provider);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->provider = $provider;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* BC to be removed in 4.0
|
||||
*/
|
||||
public function isEnabled()
|
||||
{
|
||||
if (null !== $this->provider) {
|
||||
return parent::isEnabled();
|
||||
}
|
||||
if (!$this->getContainer()->has('security.acl.provider')) {
|
||||
return false;
|
||||
}
|
||||
@ -91,6 +116,11 @@ EOF
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
// BC to be removed in 4.0
|
||||
if (null === $this->provider) {
|
||||
$this->provider = $this->getContainer()->get('security.acl.provider');
|
||||
}
|
||||
|
||||
// Parse arguments
|
||||
$objectIdentities = array();
|
||||
$maskBuilder = $this->getMaskBuilder();
|
||||
@ -136,20 +166,15 @@ EOF
|
||||
}
|
||||
}
|
||||
|
||||
/** @var $container \Symfony\Component\DependencyInjection\ContainerInterface */
|
||||
$container = $this->getContainer();
|
||||
/** @var $aclProvider MutableAclProviderInterface */
|
||||
$aclProvider = $container->get('security.acl.provider');
|
||||
|
||||
// Sets ACL
|
||||
foreach ($objectIdentities as $objectIdentity) {
|
||||
// Creates a new ACL if it does not already exist
|
||||
try {
|
||||
$aclProvider->createAcl($objectIdentity);
|
||||
$this->provider->createAcl($objectIdentity);
|
||||
} catch (AclAlreadyExistsException $e) {
|
||||
}
|
||||
|
||||
$acl = $aclProvider->findAcl($objectIdentity, $securityIdentities);
|
||||
$acl = $this->provider->findAcl($objectIdentity, $securityIdentities);
|
||||
|
||||
foreach ($securityIdentities as $securityIdentity) {
|
||||
if ($classScopeOption) {
|
||||
@ -159,13 +184,15 @@ EOF
|
||||
}
|
||||
}
|
||||
|
||||
$aclProvider->updateAcl($acl);
|
||||
$this->provider->updateAcl($acl);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the mask builder.
|
||||
*
|
||||
* BC to be removed in 4.0
|
||||
*
|
||||
* @return MaskBuilder
|
||||
*/
|
||||
protected function getMaskBuilder()
|
||||
|
@ -11,6 +11,8 @@
|
||||
|
||||
namespace Symfony\Bundle\SecurityBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Bundle\SecurityBundle\Command\InitAclCommand;
|
||||
use Symfony\Bundle\SecurityBundle\Command\SetAclCommand;
|
||||
use Symfony\Bundle\SecurityBundle\Command\UserPasswordEncoderCommand;
|
||||
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\SecurityFactoryInterface;
|
||||
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\UserProvider\UserProviderFactoryInterface;
|
||||
@ -114,6 +116,9 @@ class SecurityExtension extends Extension
|
||||
// load ACL
|
||||
if (isset($config['acl'])) {
|
||||
$this->aclLoad($config['acl'], $container);
|
||||
} else {
|
||||
$container->removeDefinition(InitAclCommand::class);
|
||||
$container->removeDefinition(SetAclCommand::class);
|
||||
}
|
||||
|
||||
$container->registerForAutoconfiguration(VoterInterface::class)
|
||||
|
@ -8,10 +8,13 @@
|
||||
<defaults public="false" />
|
||||
|
||||
<service id="Symfony\Bundle\SecurityBundle\Command\InitAclCommand">
|
||||
<argument type="service" id="security.acl.dbal.connection" />
|
||||
<argument type="service" id="security.acl.dbal.schema" />
|
||||
<tag name="console.command" command="init:acl" />
|
||||
</service>
|
||||
|
||||
<service id="Symfony\Bundle\SecurityBundle\Command\SetAclCommand">
|
||||
<argument type="service" id="security.acl.provider" />
|
||||
<tag name="console.command" command="acl:set" />
|
||||
</service>
|
||||
|
||||
|
@ -96,7 +96,7 @@ class SetAclCommandTest extends WebTestCase
|
||||
$role = 'ROLE_ADMIN';
|
||||
|
||||
$application = $this->getApplication();
|
||||
$application->add(new SetAclCommand());
|
||||
$application->add(new SetAclCommand($application->getKernel()->getContainer()->get('security.acl.provider')));
|
||||
|
||||
$setAclCommand = $application->find('acl:set');
|
||||
$setAclCommandTester = new CommandTester($setAclCommand);
|
||||
@ -138,7 +138,7 @@ class SetAclCommandTest extends WebTestCase
|
||||
$role = 'ROLE_USER';
|
||||
|
||||
$application = $this->getApplication();
|
||||
$application->add(new SetAclCommand());
|
||||
$application->add(new SetAclCommand($application->getKernel()->getContainer()->get('security.acl.provider')));
|
||||
|
||||
$setAclCommand = $application->find('acl:set');
|
||||
$setAclCommandTester = new CommandTester($setAclCommand);
|
||||
@ -170,7 +170,7 @@ class SetAclCommandTest extends WebTestCase
|
||||
$kernel->boot();
|
||||
|
||||
$application = new Application($kernel);
|
||||
$application->add(new InitAclCommand());
|
||||
$application->add(new InitAclCommand($kernel->getContainer()->get('security.acl.dbal.connection'), $kernel->getContainer()->get('security.acl.dbal.schema')));
|
||||
|
||||
$initAclCommand = $application->find('init:acl');
|
||||
$initAclCommandTester = new CommandTester($initAclCommand);
|
||||
|
Reference in New Issue
Block a user