首页 文章

Symfony2 FosUserBundle角色ROLE_ADMIN

提问于
浏览
3

我有这个问题 .

使用FosUserBundle和FacebookBundle配置了我的Sf2 env .

我设法在前端的一些ADMIN only部分(意思是主持人的事情) . 默认情况下,在我的项目中创建的每个用户都只有ROLE_USER .

"moderator"事物只能通过拥有ROLE_ADMIN来访问 . 问题是,即使我通过“ $user->addRole('ROLE_ADMIN') 添加角色,检查用户是否有这个角色失败 . 我想展示一些东西,如果用户将有这种角色,但我不能 .

{% if is_granted('ROLE_ADMIN') %} ", nor " $this->container->get('security.context')->isGranted('ROLE_ADMIN') ”都没有成功 .

每当我在TWIG上获得FALSE或什么都没有 .

Checking if user has ROLE_USER works.

只是为了确保我添加我的配置内容 .

security:
encoders:
    FOS\UserBundle\Model\UserInterface: sha512
    Symfony\Component\Security\Core\User\User: plaintext

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    chain_provider:
        chain:
          providers: [fos_userbundle, my_fos_facebook_provider]
    fos_userbundle:
        id: user_provider
    my_fos_facebook_provider:
        id: my.facebook.user


firewalls:
    public:
        pattern: ^/
        form_login:
            login_path: /login
            check_path: /login_check
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            use_referer: true
        fos_facebook:
            app_url: "http://www.facebook.com/apps/application.php?id={{APPID}}"
            server_url: "http://l.local/app_dev.php/"
            login_path: /login
            check_path: /login_fb_check
            default_target_path: /
            provider: my_fos_facebook_provider
            use_referer: true
        logout:
            path:   /logout
            invalidate_session: false
        anonymous:    true

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 }
    - { path: ^/secured/.*, role: IS_AUTHENTICATED_FULLY }
    - { path: ^/facebook/,  role: [ROLE_FACEBOOK] }
    - { path: ^/dodaj$, role: ROLE_USER }
    - { path: ^/.*, role: [IS_AUTHENTICATED_ANONYMOUSLY] }

请,如果有人可以提供帮助,因为我不知道该怎么做 .

我总是在检查以确定我的角色(“ROLE_ADMIN”)是否已添加到我的数据库中,事实上,它是 .

1 回答

  • 1

    角色是会话生成过程(连接,登录..) . 所以你从安全上下文(会话)中得到它 . 直接在twig模板中或从其他地方的securityContext对象:

    在树枝模板中使用 is_granted('ROLE_ADMIN')

    在控制器(带安全上下文)中使用 $securityContext->isGranted('ROLE_ADMIN')

    角色更改后不要忘记重新签名 .

相关问题