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

symfony 3: how to add role to specific user

它看起来很简单,我是 Symfony 的初学者,但无法弄明白。

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

我尝试在我的 User 实体的 __construct() 方法中放置类似这样的内容,但没有成功:

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

当我以该用户身份登录时,调试实用程序仅显示 'ROLE_USER',os 它不工作。

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

更新:

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

您不应在运行时添加角色,请将其添加到用户,例如使用 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'

试试这个

    $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);
    }

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

["ROLE_ADMIN"]