Я хочу показать определенное div
, если пользователю присвоено ROLE_ADMIN
.В базе данных пользователь имеет роли ROLE_ADMIN
и ROLE_USER
:
a:1:{i:0;s:10:"ROLE_ADMIN";}
Однако, когда я использую следующий код, пользователю не предоставляется разрешение, и div
не отображается:
{% if is_granted('ROLE_ADMIN') %}
<div class="settings">...</div>
{% endif %}
Div отображается, если я использую is_granted('ROLE_USER')
.
Дамп Twig показывает мне, что пользователю действительно приписаны обе роли.
Есть идеи, почему этот код не работает должным образом?
Дополнительная информация о коде:
security.yml:
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_ADMIN
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
login_path: /login
check_path: /login_check
oauth:
resource_owners:
facebook: "/login/check-facebook"
google: "/login/check-google"
login_path: /login
failure_path: /login
oauth_user_provider:
service: my_user_provider
logout: true
anonymous: true
login:
pattern: ^/login$
security: false
remember_me:
secret: "%env(APP_SECRET)%"
always_remember_me: true
path: /
domain: ~
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
Функциональность getRoles()
обрабатывается через сущность User из FOSUserBundle:
public function getRoles()
{
$roles = $this->roles;
foreach ($this->getGroups() as $group) {
$roles = array_merge($roles, $group->getRoles());
}
// we need to make sure to have at least one role
$roles[] = static::ROLE_DEFAULT;
return array_unique($roles);
}