Skip to content

[3.0][Security] Remove deprecated features #15899

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Sep 30, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -72,38 +72,6 @@ public function decide(TokenInterface $token, array $attributes, $object = null)
return $this->{$this->strategy}($token, $attributes, $object);
}

/**
* {@inheritdoc}
*/
public function supportsAttribute($attribute)
{
@trigger_error('The '.__METHOD__.' is deprecated since version 2.8 and will be removed in version 3.0.', E_USER_DEPRECATED);

foreach ($this->voters as $voter) {
if ($voter->supportsAttribute($attribute)) {
return true;
}
}

return false;
}

/**
* {@inheritdoc}
*/
public function supportsClass($class)
{
@trigger_error('The '.__METHOD__.' is deprecated since version 2.8 and will be removed in version 3.0.', E_USER_DEPRECATED);

foreach ($this->voters as $voter) {
if ($voter->supportsClass($class)) {
return true;
}
}

return false;
}

/**
* Grants access if any voter returns an affirmative response.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,26 +30,4 @@ interface AccessDecisionManagerInterface
* @return bool true if the access is granted, false otherwise
*/
public function decide(TokenInterface $token, array $attributes, $object = null);

/**
* Checks if the access decision manager supports the given attribute.
*
* @param string $attribute An attribute
*
* @return bool true if this decision manager supports the attribute, false otherwise
*
* @deprecated since version 2.8, to be removed in 3.0.
*/
public function supportsAttribute($attribute);

/**
* Checks if the access decision manager supports the given class.
*
* @param string $class A class name
*
* @return true if this decision manager can process the class
*
* @deprecated since version 2.8, to be removed in 3.0.
*/
public function supportsClass($class);
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,32 +21,6 @@
*/
abstract class AbstractVoter implements VoterInterface
{
/**
* {@inheritdoc}
*/
public function supportsAttribute($attribute)
{
@trigger_error('The '.__METHOD__.' is deprecated since version 2.8 and will be removed in version 3.0.', E_USER_DEPRECATED);

return in_array($attribute, $this->getSupportedAttributes());
}

/**
* {@inheritdoc}
*/
public function supportsClass($class)
{
@trigger_error('The '.__METHOD__.' is deprecated since version 2.8 and will be removed in version 3.0.', E_USER_DEPRECATED);

foreach ($this->getSupportedClasses() as $supportedClass) {
if ($supportedClass === $class || is_subclass_of($class, $supportedClass)) {
return true;
}
}

return false;
}

/**
* Iteratively check all given attributes by calling isGranted.
*
Expand Down Expand Up @@ -93,35 +67,12 @@ public function vote(TokenInterface $token, $object, array $attributes)
* To determine if the passed class is instance of the supported class, the
* isClassInstanceOf() method can be used.
*
* 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
*
* @return bool True if the attribute and class is supported, false otherwise
*/
protected function supports($attribute, $class)
{
@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)) {
$classIsSupported = true;
break;
}
}

if (!$classIsSupported) {
return false;
}

if (!in_array($attribute, $this->getSupportedAttributes())) {
return false;
}

return true;
}
abstract protected function supports($attribute, $class);

/**
* A helper method to test if the actual class is instanceof or equal
Expand All @@ -137,71 +88,18 @@ 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.
*
* @return array an array of supported classes, i.e. array('Acme\DemoBundle\Model\Product')
*
* @deprecated since version 2.8, to be removed in 3.0. Use supports() instead.
*/
protected function getSupportedClasses()
{
@trigger_error('The '.__METHOD__.' is deprecated since version 2.8 and will be removed in version 3.0.', E_USER_DEPRECATED);
}

/**
* Return an array of supported attributes. This will be called by supportsAttribute.
*
* @return array an array of supported attributes, i.e. array('CREATE', 'READ')
*
* @deprecated since version 2.8, to be removed in 3.0. Use supports() instead.
*/
protected function getSupportedAttributes()
{
@trigger_error('The '.__METHOD__.' is deprecated since version 2.8 and will be removed in version 3.0.', E_USER_DEPRECATED);
}

/**
* Perform a single access check operation on a given attribute, object and (optionally) user
* It is safe to assume that $attribute and $object's class pass supportsAttribute/supportsClass
* $user can be one of the following:
* a UserInterface object (fully authenticated user)
* a string (anonymously authenticated user).
*
* @param string $attribute
* @param object $object
* @param UserInterface|string $user
*
* @deprecated This method will be removed in 3.0 - override voteOnAttribute instead.
*
* @return bool
*/
protected function isGranted($attribute, $object, $user = null)
{
// forces isGranted() or voteOnAttribute() to be overridden
throw new \BadMethodCallException(sprintf('You must override the voteOnAttribute() method in "%s".', get_class($this)));
}

/**
* Perform a single access check operation on a given attribute, object and (optionally) user
* It is safe to assume that $attribute and $object's class pass supportsAttribute/supportsClass
* $user can be one of the following:
* a UserInterface object (fully authenticated user)
* a string (anonymously authenticated user).
*
* This method will become abstract in 3.0.
*
* @param string $attribute
* @param object $object
* @param TokenInterface $token
*
* @return bool
*/
protected function voteOnAttribute($attribute, $object, TokenInterface $token)
{
// the user should override this method, and not rely on the deprecated isGranted()
@trigger_error(sprintf("The AbstractVoter::isGranted() method is deprecated since 2.8 and won't be called anymore in 3.0. Override voteOnAttribute() in %s instead.", get_class($this)), E_USER_DEPRECATED);

return $this->isGranted($attribute, $object, $token->getUser());
}
abstract protected function voteOnAttribute($attribute, $object, TokenInterface $token);
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,28 +24,6 @@ interface VoterInterface
const ACCESS_ABSTAIN = 0;
const ACCESS_DENIED = -1;

/**
* Checks if the voter supports the given attribute.
*
* @param string $attribute An attribute
*
* @return bool true if this Voter supports the attribute, false otherwise
*
* @deprecated since version 2.8, to be removed in 3.0.
*/
public function supportsAttribute($attribute);

/**
* Checks if the voter supports the given class.
*
* @param string $class A class name
*
* @return bool true if this Voter can process the class
*
* @deprecated since version 2.8, to be removed in 3.0.
*/
public function supportsClass($class);

/**
* Returns the vote for the given parameters.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,42 +16,6 @@

class AccessDecisionManagerTest extends \PHPUnit_Framework_TestCase
{
/**
* @group legacy
*/
public function testSupportsClass()
{
$manager = new AccessDecisionManager(array(
$this->getVoterSupportsClass(true),
$this->getVoterSupportsClass(false),
));
$this->assertTrue($manager->supportsClass('FooClass'));

$manager = new AccessDecisionManager(array(
$this->getVoterSupportsClass(false),
$this->getVoterSupportsClass(false),
));
$this->assertFalse($manager->supportsClass('FooClass'));
}

/**
* @group legacy
*/
public function testSupportsAttribute()
{
$manager = new AccessDecisionManager(array(
$this->getVoterSupportsAttribute(true),
$this->getVoterSupportsAttribute(false),
));
$this->assertTrue($manager->supportsAttribute('foo'));

$manager = new AccessDecisionManager(array(
$this->getVoterSupportsAttribute(false),
$this->getVoterSupportsAttribute(false),
));
$this->assertFalse($manager->supportsAttribute('foo'));
}

/**
* @expectedException \InvalidArgumentException
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,27 +54,6 @@ public function testVote(array $attributes, $expectedVote, $object, $message)

$this->assertEquals($expectedVote, $voter->vote($this->token, $object, $attributes), $message);
}

/**
* @dataProvider getTests
* @group legacy
*/
public function testVoteLegacy(array $attributes, $expectedVote, $object, $message)
{
$voter = new AbstractVoterTest_LegacyVoter();

$this->assertEquals($expectedVote, $voter->vote($this->token, $object, $attributes), $message);
}

/**
* @group legacy
* @expectedException \BadMethodCallException
*/
public function testNoOverriddenMethodsThrowsException()
{
$voter = new AbstractVoterTest_NothingImplementedVoter();
$voter->vote($this->token, new \stdClass(), array('EDIT'));
}
}

class AbstractVoterTest_Voter extends AbstractVoter
Expand All @@ -90,36 +69,3 @@ protected function supports($attribute, $class)
&& in_array($attribute, array('EDIT', 'CREATE'));
}
}

class AbstractVoterTest_LegacyVoter extends AbstractVoter
{
protected function getSupportedClasses()
{
return array('stdClass');
}

protected function getSupportedAttributes()
{
return array('EDIT', 'CREATE');
}

protected function isGranted($attribute, $object, $user = null)
{
return 'EDIT' === $attribute;
}
}

class AbstractVoterTest_NothingImplementedVoter extends AbstractVoter
{
protected function getSupportedClasses()
{
return array('stdClass');
}

protected function getSupportedAttributes()
{
return array('EDIT', 'CREATE');
}

// this is a bad voter that hasn't overridden isGranted or voteOnAttribute
}