Symfony Security и FOSUserBundle: проблема с разрешением ROLE_ADMIN - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу показать определенное 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);
    }
...