symfony / security-acl

Symfony Security ACL Component
https://symfony.com/components/Security
MIT License
362 stars 49 forks source link

Fix doctrine/dbal 2.13 incompatibility #64

Closed acrobat closed 3 years ago

acrobat commented 3 years ago

Fixes #63

As this blogpost suggests, libraries should update their doctrine/dbal dependency to ^2.13. This PR bumps the doctrine/dbal dependency version and fixes the incompatibility

bobvandevijver commented 3 years ago

Maybe it should be ResultStatement instead of Result? See https://github.com/doctrine/dbal/issues/4588

acrobat commented 3 years ago

I think the used interface is correct as the forward compatibility layer also implements Doctrine\DBAL\Result

https://github.com/doctrine/dbal/blob/79a6a843d49de8676efd38f30d29023c69ebff02/lib/Doctrine/DBAL/ForwardCompatibility/Result.php#L21

And in dbal v3 that interface is replaced by the Result class, so this typehint will still work correctly I think.

derrabus commented 3 years ago

Thank you @acrobat.

acrobat commented 3 years ago

Thanks for the merge @derrabus, is it also possible to have this available in a release? Thanks!

Webonaute commented 3 years ago

I have the same issue? is this has been released?

acrobat commented 3 years ago

@Webonaute yes, it's included in v3.1.2

Webonaute commented 3 years ago

I have symfony/security-acl v3.1.2 installed. I still have the issue. I also have doctrine/dbal 2.13.1 installed.

what else am missing?

acrobat commented 3 years ago

What exact error do you get?

Webonaute commented 3 years ago
 [TypeError]                                                                                                                                                                                                                                                                                    
  Argument 1 passed to Symfony\Component\Security\Acl\Dbal\AclProvider::hydrateObjectIdentities() must be an instance of Doctrine\DBAL\Result, instance of Doctrine\DBAL\Driver\Mysqli\Statement given, called in /var/www/pnp-api/vendor/symfony/security-acl/Dbal/AclProvider.php on line 468  

Exception trace:
  at /var/www/pnp-api/vendor/symfony/security-acl/Dbal/AclProvider.php:484
 Symfony\Component\Security\Acl\Dbal\AclProvider->hydrateObjectIdentities() at /var/www/pnp-api/vendor/symfony/security-acl/Dbal/AclProvider.php:468
 Symfony\Component\Security\Acl\Dbal\AclProvider->lookupObjectIdentities() at /var/www/pnp-api/vendor/symfony/security-acl/Dbal/AclProvider.php:176
 Symfony\Component\Security\Acl\Dbal\AclProvider->findAcls() at /var/www/pnp-api/vendor/symfony/security-acl/Dbal/MutableAclProvider.php:128
 Symfony\Component\Security\Acl\Dbal\MutableAclProvider->findAcls() at /var/www/pnp-api/vendor/symfony/security-acl/Dbal/AclProvider.php:92
 Symfony\Component\Security\Acl\Dbal\AclProvider->findAcl() at /var/www/pnp-api/vendor/sonata-project/admin-bundle/src/Security/Handler/AclSecurityHandler.php:167
 Sonata\AdminBundle\Security\Handler\AclSecurityHandler->getObjectAcl() at /var/www/pnp-api/vendor/sonata-project/admin-bundle/src/Util/AdminAclManipulator.php:59
 Sonata\AdminBundle\Util\AdminAclManipulator->configureAcls() at /var/www/pnp-api/vendor/sonata-project/admin-bundle/src/Command/SetupAclCommand.php:70
 Sonata\AdminBundle\Command\SetupAclCommand->execute() at /var/www/pnp-api/vendor/symfony/console/Command/Command.php:255
 Symfony\Component\Console\Command\Command->run() at /var/www/pnp-api/vendor/symfony/console/Application.php:1018
 Symfony\Component\Console\Application->doRunCommand() at /var/www/pnp-api/vendor/symfony/framework-bundle/Console/Application.php:97
 Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /var/www/pnp-api/vendor/symfony/console/Application.php:271
 Symfony\Component\Console\Application->doRun() at /var/www/pnp-api/vendor/symfony/framework-bundle/Console/Application.php:83
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /var/www/pnp-api/vendor/symfony/console/Application.php:147
 Symfony\Component\Console\Application->run() at /var/www/pnp-api/bin/console:43

sonata:admin:setup-acl [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--trackingid [TRACKINGID]] [--] <command>
derrabus commented 3 years ago

@Webonaute Can you please produce a reproducer application and open a new issue? That would help us working on a fix. If you can provide a PR with a fix, that would also be more than welcome.

Webonaute commented 3 years ago

I found out that our internal MasterSlave wrapper was not updated with new PrimaryReplica class and returning wrong object.

derrabus commented 3 years ago

Okay, so there's nothing to do on our side? Thanks for checking.