Skip to content

Commit d7f8838

Browse files
authored
Merge pull request #1 from curiosity26/develop
Add cast support of Postgres.
2 parents 2806f49 + 1d280f1 commit d7f8838

File tree

6 files changed

+99
-5
lines changed

6 files changed

+99
-5
lines changed

.idea/php.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

DependencyInjection/Curiosity26AclHelperExtension.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@
55
* Date: 11/2/18
66
* Time: 2:00 PM
77
*/
8+
89
namespace Curiosity26\AclHelperBundle\DependencyInjection;
910

11+
use Oro\ORM\Query\AST\Functions\Cast;
1012
use Symfony\Component\Config\FileLocator;
1113
use Symfony\Component\DependencyInjection\ContainerBuilder;
1214
use Symfony\Component\DependencyInjection\Extension\Extension;
15+
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
1316
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
1417

15-
class Curiosity26AclHelperExtension extends Extension
18+
class Curiosity26AclHelperExtension extends Extension implements PrependExtensionInterface
1619
{
1720
/**
1821
* @param array $configs
@@ -26,4 +29,18 @@ public function load(array $configs, ContainerBuilder $container)
2629
$loader->load('services.yaml');
2730
}
2831

32+
public function prepend(ContainerBuilder $container)
33+
{
34+
$configs = $container->getExtensionConfig('doctrine');
35+
36+
if (!empty($configs) && array_key_exists('orm', $configs[0])) {
37+
$config = $configs[0];
38+
$default = array_key_exists(
39+
'default_entity_manager',
40+
$config['orm']
41+
) ? $config['orm']['default_entity_manager'] : 'default';
42+
$config['orm']['entity_managers'][$default]['dql']['string_functions']['cast'] = Cast::class;
43+
$container->prependExtensionConfig('doctrine', $config);
44+
}
45+
}
2946
}

Helper/AclHelper.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,12 @@ public function createAclManager()
5858
{
5959
return new AclManager($this->aclProvider);
6060
}
61+
62+
/**
63+
* @return MutableAclProviderInterface
64+
*/
65+
public function getAclProvider(): MutableAclProviderInterface
66+
{
67+
return $this->aclProvider;
68+
}
6169
}

QueryBuilder/AclHelperQueryBuilder.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
use Curiosity26\AclHelperBundle\Entity\Entry;
1313
use Curiosity26\AclHelperBundle\Entity\ObjectIdentity;
1414
use Curiosity26\AclHelperBundle\Entity\SecurityIdentity;
15+
use Doctrine\DBAL\Platforms\PostgreSqlPlatform;
16+
use Doctrine\DBAL\Platforms\SqlitePlatform;
1517
use Doctrine\ORM\Mapping\ClassMetadata;
1618
use Doctrine\ORM\Query\Expr\Join;
1719
use Doctrine\ORM\QueryBuilder;
@@ -77,6 +79,7 @@ public function createAclQueryBuilder(
7779
* @param string $strategy
7880
*
7981
* @return QueryBuilder
82+
* @throws \Doctrine\DBAL\DBALException
8083
*/
8184
public function buildAclQuery($strategy = PermissionGrantingStrategy::ANY)
8285
{
@@ -99,8 +102,15 @@ public function buildAclQuery($strategy = PermissionGrantingStrategy::ANY)
99102
$expr->add($q->expr()->neq('BIT_AND(acl_e.mask, :mask)', 0));
100103
}
101104

105+
$platform = $manager->getConnection()->getDatabasePlatform();
106+
107+
if ($platform instanceof PostgreSqlPlatform) {
108+
$q->select('CAST(acl_o.objectIdentifier as int)');
109+
} else {
110+
$q->select('acl_o.objectIdentifier');
111+
}
112+
102113
$q
103-
->select('acl_o.objectIdentifier')
104114
->distinct()
105115
->from(ObjectIdentity::class, 'acl_o')
106116
->innerJoin(AclClass::class, 'acl_c', Join::WITH, 'acl_c.id = acl_o.classId')

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"symfony/acl-bundle": "^1.0",
99
"doctrine/doctrine-bundle": "^1.9",
1010
"doctrine/orm": "^2.6",
11-
"symfony/class-loader": "^3.4"
11+
"symfony/class-loader": "^3.4",
12+
"oro/doctrine-extensions": "^1.2"
1213
},
1314
"require-dev": {
1415
"phpunit/phpunit": "^7.4",

composer.lock

Lines changed: 59 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)