@IsGranted
ограничен РОЛЬМИ и привилегиями, за которые проголосовали охранники (за роли голосует конкретный избиратель), поскольку ваша роль менеджера, очевидно, включает роль руководителя (по любой причине). Иерархии в смысле ролей работают так, что это по существу дерево, в котором роль пользователя находится в корне, и она ответвляется от этой. Правила для ваших ролей должны быть:
ROLE_MANAGER: ROLE_USER
ROLE_SUPERVISOR: ROLE_MANAGER
, которые должны читаться как «каждый менеджер - пользователь» и «каждый руководитель - менеджер». Для этого достаточно @IsGranted('ROLE_SUPERVISOR')
.
Однако вы можете быть более явным, используя синтаксис @Security
и требуя, чтобы пользователь возвращал определенную роль для User::getRoles()
:
@Security("'ROLE_SUPERVISOR' in user.getRoles()")
(может быть, user.roles
достаточно ... но я не совсем уверен).
не забывайте предложение use:
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
Также обратите внимание,эти роли кэшируются до выхода из системы.