Может кто-нибудь объяснить мне разницу между: @Security("has_role("ROLE_ADMIN")") и @Security("is_granted("ROLE_ADMIN")") и какой из них более рекомендуется?




В этом случае они выполняют ту же работу, но функция has_role() в выражениях безопасности устарела, начиная с Symfony 4.2, поэтому вместо нее мы должны использовать is_granted().
Официальная информация: symfony.com/blog/symfony-4-2-curated-new-features#security
Я думаю, что has_role() проверяет, есть ли у пользователя уже роль. С другой стороны, is_granted() запускает избирателей, чтобы проверить, есть ли роль, которую нужно добавить к существующим ролям.
Это кажется слишком сложным, и я рад, что они избавились от одного. Наличие двух способов установить или проверить разрешение пользователя на что-либо в зависимости от того, чем он является или что ему предоставлено, сбивает с толку при разговоре об этом с пользователями, владельцами продукта или потенциальными клиентами. Я не знаю, почему у них было два разных способа отличить по сути одно и то же.
Он служит в очень специфических сценариях, но по большей части иметь только один гораздо проще.
has_role устарела в Symfony 4 и удалена в Symfony 5. Так что используйте is_granted. Они идентичны, когда дело доходит до проверки роли пользователя. Однако is_granted имеет возможность проверять определенные разрешения для определенных объектов. В документах S5 все еще есть пара ссылок на has_role. Рано или поздно их уберут.