diff --git a/src/Symfony/Component/Security/CHANGELOG.md b/src/Symfony/Component/Security/CHANGELOG.md index b6d47712bd..6af6cf215b 100644 --- a/src/Symfony/Component/Security/CHANGELOG.md +++ b/src/Symfony/Component/Security/CHANGELOG.md @@ -6,6 +6,7 @@ CHANGELOG * Removed `Argon2iPasswordEncoder`, use `SodiumPasswordEncoder` instead * Removed `BcryptPasswordEncoder`, use `NativePasswordEncoder` instead +* Removed the `has_role()` function from security expressions, use `is_granted()` instead. 4.3.0 ----- diff --git a/src/Symfony/Component/Security/Core/Authorization/ExpressionLanguageProvider.php b/src/Symfony/Component/Security/Core/Authorization/ExpressionLanguageProvider.php index 029c96db8f..449dbce618 100644 --- a/src/Symfony/Component/Security/Core/Authorization/ExpressionLanguageProvider.php +++ b/src/Symfony/Component/Security/Core/Authorization/ExpressionLanguageProvider.php @@ -53,16 +53,6 @@ class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface }, function (array $variables) { return $variables['trust_resolver']->isRememberMe($variables['token']); }), - - new ExpressionFunction('has_role', function ($role) { - @trigger_error('Using the "has_role()" function in security expressions is deprecated since Symfony 4.2, use "is_granted()" instead.', E_USER_DEPRECATED); - - return sprintf('in_array(%s, $roles)', $role); - }, function (array $variables, $role) { - @trigger_error('Using the "has_role()" function in security expressions is deprecated since Symfony 4.2, use "is_granted()" instead.', E_USER_DEPRECATED); - - return \in_array($role, $variables['roles']); - }), ]; } } diff --git a/src/Symfony/Component/Security/Core/Authorization/Voter/ExpressionVoter.php b/src/Symfony/Component/Security/Core/Authorization/Voter/ExpressionVoter.php index e35583555d..b91b83af92 100644 --- a/src/Symfony/Component/Security/Core/Authorization/Voter/ExpressionVoter.php +++ b/src/Symfony/Component/Security/Core/Authorization/Voter/ExpressionVoter.php @@ -33,25 +33,8 @@ class ExpressionVoter implements VoterInterface private $authChecker; private $roleHierarchy; - /** - * @param AuthorizationCheckerInterface $authChecker - */ - public function __construct(ExpressionLanguage $expressionLanguage, AuthenticationTrustResolverInterface $trustResolver, $authChecker = null, RoleHierarchyInterface $roleHierarchy = null) + public function __construct(ExpressionLanguage $expressionLanguage, AuthenticationTrustResolverInterface $trustResolver, AuthorizationCheckerInterface $authChecker, RoleHierarchyInterface $roleHierarchy = null) { - if ($authChecker instanceof RoleHierarchyInterface) { - @trigger_error(sprintf('Passing a RoleHierarchyInterface to "%s()" is deprecated since Symfony 4.2. Pass an AuthorizationCheckerInterface instead.', __METHOD__), E_USER_DEPRECATED); - $roleHierarchy = $authChecker; - $authChecker = null; - - if (!method_exists($roleHierarchy, 'getReachableRoleNames')) { - @trigger_error(sprintf('Not implementing the getReachableRoleNames() method in %s which implements %s is deprecated since Symfony 4.3.', \get_class($this->roleHierarchy), RoleHierarchyInterface::class), E_USER_DEPRECATED); - } - } elseif (null === $authChecker) { - @trigger_error(sprintf('Argument 3 passed to "%s()" should be an instance of AuthorizationCheckerInterface, not passing it is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED); - } elseif (!$authChecker instanceof AuthorizationCheckerInterface) { - throw new \TypeError(sprintf('Argument 3 passed to %s() must be an instance of %s or null, %s given.', __METHOD__, AuthorizationCheckerInterface::class, \is_object($authChecker) ? \get_class($authChecker) : \gettype($authChecker))); - } - $this->expressionLanguage = $expressionLanguage; $this->trustResolver = $trustResolver; $this->authChecker = $authChecker; diff --git a/src/Symfony/Component/Security/Core/Tests/Authorization/ExpressionLanguageTest.php b/src/Symfony/Component/Security/Core/Tests/Authorization/ExpressionLanguageTest.php index 2950d3feff..0e0e97dac6 100644 --- a/src/Symfony/Component/Security/Core/Tests/Authorization/ExpressionLanguageTest.php +++ b/src/Symfony/Component/Security/Core/Tests/Authorization/ExpressionLanguageTest.php @@ -83,30 +83,4 @@ class ExpressionLanguageTest extends TestCase [$usernamePasswordToken, "is_granted('ROLE_USER')", true], ]; } - - /** - * @dataProvider provideLegacyHasRole - * @group legacy - */ - public function testLegacyHasRole($expression, $result, $roles = []) - { - $expressionLanguage = new ExpressionLanguage(); - $context = ['roles' => $roles]; - - $this->assertEquals($result, $expressionLanguage->evaluate($expression, $context)); - } - - public function provideLegacyHasRole() - { - $roles = ['ROLE_USER', 'ROLE_ADMIN']; - - return [ - ["has_role('ROLE_FOO')", false], - ["has_role('ROLE_USER')", false], - ["has_role('ROLE_ADMIN')", false], - ["has_role('ROLE_FOO')", false, $roles], - ["has_role('ROLE_USER')", true, $roles], - ["has_role('ROLE_ADMIN')", true, $roles], - ]; - } }