symfony 3:如何向特定用户添加角色

时间:2017-11-06 13:09:01

标签: symfony roles

看起来非常简单,我是Symfony的先驱,但无法理解。

我正在使用FOSUserBundle,我正在尝试将特定角色(ROLE_ADMIN)添加到特定用户(例如我),因此当用户登录时,该角色已分配并且他可以访问某些页面。

我尝试在我的用户实体的__construct()方法中添加这样的内容,但它不起作用:

if($this->getUsername()=='johndoe') $this->addRole('ROLE_ADMIN');

当我以该用户身份登录时,调试实用程序仅显示“ROLE_USER”,但它不起作用。

这是正确的代码吗?我应该把它放在哪里?

更新

偶然发现了一个愚蠢的错误。我在调用FOSUserBundle之前创建了User实体,不知怎的,我试图提升的用户通过CLI给了我错误。也许它没有正确存储在数据库中。一旦我创建了一个新的并再次尝试,该命令就能按预期工作。

3 个答案:

答案 0 :(得分:2)

您不应在运行时添加该角色,请将其添加到用户,例如使用CLI命令(或直接在数据库中更改它),如documentation

中所述
php bin/console fos:user:promote testuser ROLE_ADMIN

如果你坚持在运行期间改变角色,那么理解你的目标和原因是很好的。

另一种选择是将单个特殊用户作为内存用户加载为here

# app/config/security.yml
security:
    providers:
        in_memory:
            memory:
                users:
                    johndoe:
                        password: somepassword
                        roles: 'ROLE_ADMIN'

答案 1 :(得分:2)

试试这个

    $userObject=$this->getUser();
     $username = $userObject->getUsername();
     if($username == 'johndoe')
     {
        $user = $this->get('fos_user.user_manager')->findUserByUsernameOrEmail($username);
        $user->setRoles( array('ROLE_ADMIN') );
        $userManager->updateUser($user, true);
    }

答案 2 :(得分:2)

如果您可以访问数据库,只需更新roles列:

["ROLE_ADMIN"]