Symfony2 FosUserBundle角色角色\u管理员

Symfony2 FosUserBundle角色角色\u管理员,symfony,fosuserbundle,user-roles,Symfony,Fosuserbundle,User Roles,我有这个问题 已使用FosUserBundle和FacebookBundle配置了我的Sf2环境 我已经设法在前端添加了一些管理员专区(意思是版主)。 默认情况下,在我的项目中创建的每个用户都只有角色\用户 “版主”的东西只能通过角色\管理员来访问。问题是,即使我通过“$user->addRole('role\u ADMIN')添加角色,检查用户是否有此角色失败。 我想展示一些东西,如果用户将有这种角色,但我不能 既不是“{%if被授予('ROLE\u ADMIN')%””, 也未成功授予“$t

我有这个问题

已使用FosUserBundle和FacebookBundle配置了我的Sf2环境

我已经设法在前端添加了一些管理员专区(意思是版主)。 默认情况下,在我的项目中创建的每个用户都只有角色\用户

“版主”的东西只能通过角色\管理员来访问。问题是,即使我通过“
$user->addRole('role\u ADMIN')
添加角色,检查用户是否有此角色失败。 我想展示一些东西,如果用户将有这种角色,但我不能

既不是“
{%if被授予('ROLE\u ADMIN')%”
”, 也未成功授予“
$this->container->get('security.context')->('ROLE\u ADMIN')

每一次,当涉及到细枝的时候,我都会变得虚假或者什么都没有

检查用户是否具有角色\u用户工作。

只是为了确保我正在添加配置文件

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] }
请,如果有人能帮忙的话,因为我不知道该怎么办


我一直在检查我的角色(“角色\管理员”)是否已添加到我的数据库中,事实上确实如此。

该角色在会话生成(连接、登录..)时处于处理状态。因此,您可以从安全上下文(会话)中获取该角色。直接在小枝模板中或从其他位置的securityContext对象中获取:

在细枝模板中使用
已被授予('ROLE\u ADMIN')

在控制器(具有安全上下文)中,使用
$securityContext->isgrated('ROLE\u ADMIN')


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

1.您是否坚持(
$userManager->updateUser($user)
用户对象?2.您是否在与
$user->addRole()
相同的请求中或在下一个请求中执行角色检查?嗯,我执行了。(
$user->save()
)我在保存用户后检查了角色。这有点奇怪。我不知道这是否是一件平常的事情,但即使我的数据库中的角色位置为NULL,当我执行
$user->getRoles()时
我得到了ROLE\u USER。我知道这可能是任何人的默认角色,但事实上,问题在于ROLE\u ADMIN。请确保重新登录以应用该角色。我从来都不知道我们需要它。好的,这是我真正还没有做的事情。当我将某个角色应用到用户(我自己的角色)时,请让我正确理解它检查controller或twig中的角色,我只是检查字符串,对吗?没有必要做其他的配置工作?角色字段对于管理员用户来说是不是像
a:1:{i:0;s:10:role\u ADMIN”}
?对不起,我不理解这种书写形式。什么是
a:1:{i:0;s:10:role\u ADMIN”}
我从未见过这种情况。仅供参考:这种符号是序列化后存储在数据库中的角色数组。仅更新我的答案是不够的?但我应该怎么做才能不重新签名用户?