diff --git a/UPGRADE-3.0.md b/UPGRADE-3.0.md index 855056b682..96f6f8285c 100644 --- a/UPGRADE-3.0.md +++ b/UPGRADE-3.0.md @@ -707,10 +707,9 @@ UPGRADE FROM 2.x to 3.0 ```php class MyVoter extends AbstractVoter { - protected function supports($attribute, $class) + protected function supports($attribute, $object) { - return $this->isClassInstanceOf($class, 'AppBundle\Entity\Post') - && in_array($attribute, array('CREATE', 'EDIT')); + return $object instanceof Post && in_array($attribute, array('CREATE', 'EDIT')); } // ... diff --git a/src/Symfony/Component/Security/Core/Authorization/Voter/AbstractVoter.php b/src/Symfony/Component/Security/Core/Authorization/Voter/AbstractVoter.php index 799c6f7c4d..7b04222eae 100644 --- a/src/Symfony/Component/Security/Core/Authorization/Voter/AbstractVoter.php +++ b/src/Symfony/Component/Security/Core/Authorization/Voter/AbstractVoter.php @@ -68,10 +68,9 @@ abstract class AbstractVoter implements VoterInterface // abstain vote by default in case none of the attributes are supported $vote = self::ACCESS_ABSTAIN; - $class = get_class($object); foreach ($attributes as $attribute) { - if (!$this->supports($attribute, $class)) { + if (!$this->supports($attribute, $object)) { continue; } @@ -88,25 +87,22 @@ abstract class AbstractVoter implements VoterInterface } /** - * Determines if the attribute and class are supported by this voter. - * - * To determine if the passed class is instance of the supported class, the - * isClassInstanceOf() method can be used. + * Determines if the attribute and object are supported by this voter. * * This method will become abstract in 3.0. * * @param string $attribute An attribute - * @param string $class The fully qualified class name of the passed object + * @param string $object The object to secure * - * @return bool True if the attribute and class is supported, false otherwise + * @return bool True if the attribute and object is supported, false otherwise */ - protected function supports($attribute, $class) + protected function supports($attribute, $object) { @trigger_error('The getSupportedClasses and getSupportedAttributes methods are deprecated since version 2.8 and will be removed in version 3.0. Overwrite supports instead.', E_USER_DEPRECATED); $classIsSupported = false; foreach ($this->getSupportedClasses() as $supportedClass) { - if ($this->isClassInstanceOf($class, $supportedClass)) { + if ($object instanceof $supportedClass) { $classIsSupported = true; break; } @@ -123,20 +119,6 @@ abstract class AbstractVoter implements VoterInterface return true; } - /** - * A helper method to test if the actual class is instanceof or equal - * to the expected class. - * - * @param string $actualClass The actual class name - * @param string $expectedClass The expected class name - * - * @return bool - */ - protected function isClassInstanceOf($actualClass, $expectedClass) - { - return $expectedClass === $actualClass || is_subclass_of($actualClass, $expectedClass); - } - /** * Return an array of supported classes. This will be called by supportsClass. * diff --git a/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/AbstractVoterTest.php b/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/AbstractVoterTest.php index 7062d3983b..5ea77320cf 100644 --- a/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/AbstractVoterTest.php +++ b/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/AbstractVoterTest.php @@ -84,10 +84,9 @@ class AbstractVoterTest_Voter extends AbstractVoter return 'EDIT' === $attribute; } - protected function supports($attribute, $class) + protected function supports($attribute, $object) { - return $this->isClassInstanceOf($class, 'stdClass') - && in_array($attribute, array('EDIT', 'CREATE')); + return $object instanceof \stdClass && in_array($attribute, array('EDIT', 'CREATE')); } }