This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Fabien Potencier 24350138b9 bug #37325 Fix the supports() method argument type of the security voter (francoispluchino)
This PR was submitted for the master branch but it was merged into the 5.0 branch instead.

Discussion
----------

Fix the supports() method argument type of the security voter

| Q             | A
| ------------- | ---
| Branch?       | 5.0 and 5.1
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | ~
| License       | MIT
| Doc PR        | ~

Since adding types to method arguments in the version 5.0 (and therefore also 5.1), there is a type mismatch on the first argument of the `supports()` method of the abstract class `Symfony\Component\Security\Core\Authorization\Voter\Voter`.

Indeed, the `supports()` method had in previous versions (4.x), the phpdoc indicating that the argument `$attribute` must be a `string`, but this one is not compatible with the `isGranted()` method of the interface `Symfony\Component\Security\Core\AuthorizationAuthorizationCheckerInterface` whose the `$attribute` argument is of type `mixed`.

The problem arises when you have voters extending the abstract class `Voter` positioned before a vote with an attribute of a type other than `string`.

Apart from Voters created by third parties, there is the voter `ExpressionVoter` which waits in attribute, an instance of the class `Symfony\Component\ExpressionLanguage\Expression` (you can see the [doc](https://symfony.com/doc/current/security/expressions.html) for an example). Just add a voter extending the abstract class `Voter` with a higher priority than the voter `ExpressionVoter` to get the error:

```
Argument 1 passed to FooVoter::supports() must be of the type string, object given
```

To avoid removing the type of the `$attribute` argument from the method `Symfony\Component\Security\Core\Authorization\Voter\Voter::supports(string $attribute, $subject)`, which can break the backward compatibility, you just have to test in the `vote()` method if the attribute is not a `string` and continue before calling the `supports()` method.

Commits
-------

b8192eecab Fix the 'supports' method argument type of the security voter
2020-06-25 11:02:02 +02:00
.github Merge branch '4.4' into 5.0 2020-06-18 23:39:22 +02:00
src/Symfony Fix the 'supports' method argument type of the security voter 2020-06-25 11:01:55 +02:00
.appveyor.yml Merge branch '4.4' into 5.0 2020-04-12 11:48:36 +02:00
.editorconfig Update .editorconfig 2018-09-06 16:22:56 +02:00
.gitignore Run the phpunit-bridge from a PR 2019-08-02 17:46:19 +02:00
.php_cs.dist Merge branch '4.4' 2019-11-05 18:15:52 +01:00
.travis.yml Merge branch '4.4' into 5.0 2020-06-09 13:33:14 +02:00
CHANGELOG-4.0.md Merge branch '3.4' into 4.1 2018-08-01 18:22:14 +02:00
CHANGELOG-4.1.md updated CHANGELOG for 4.1.10 2019-01-06 17:16:07 +01:00
CHANGELOG-4.2.md updated CHANGELOG for 4.2.10 2019-06-26 16:19:37 +02:00
CHANGELOG-4.3.md updated CHANGELOG for 4.3.10 2020-01-21 14:13:32 +01:00
CHANGELOG-4.4.md updated CHANGELOG for 4.4.10 2020-06-12 13:15:31 +02:00
CHANGELOG-5.0.md updated CHANGELOG for 5.0.10 2020-06-12 13:20:12 +02:00
CODE_OF_CONDUCT.md Added the Code of Conduct file 2018-10-10 03:13:30 -07:00
composer.json Merge branch '4.4' into 5.0 2020-06-18 21:53:24 +02:00
CONTRIBUTING.md Mention the community review guide 2016-12-18 22:02:35 +01:00
CONTRIBUTORS.md update CONTRIBUTORS for 3.4.42 2020-06-12 12:57:05 +02:00
LICENSE Update year in license files 2020-01-01 12:03:25 +01:00
link Add new packages on the link script 2020-03-04 17:45:35 +01:00
phpunit Remove patches for Doctrine bugs and deprecations 2020-05-08 11:45:13 +02:00
phpunit.xml.dist [Cache] Add optimized FileSystem & Redis TagAware Adapters 2019-04-24 07:47:35 +02:00
README.md Improve Symfony description 2019-11-24 19:17:45 +01:00
UPGRADE-5.0.md Remove UPGRADE files for 4.x 2020-04-12 15:08:12 +02:00

Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Symfony is used by thousands of web applications (including BlaBlaCar.com and Spotify.com) and most of the popular PHP projects (including Drupal and Magento).

Installation

Documentation

Community

Contributing

Symfony is an Open Source, community-driven project with thousands of contributors. Join them contributing code or contributing documentation.

Security Issues

If you discover a security vulnerability within Symfony, please follow our disclosure procedure.

About Us

Symfony development is sponsored by SensioLabs, led by the Symfony Core Team and supported by Symfony contributors.