看起来非常简单,我是Symfony的先驱,但无法理解。
我正在使用FOSUserBundle,我正在尝试将特定角色(ROLE_ADMIN)添加到特定用户(例如我),因此当用户登录时,该角色已分配并且他可以访问某些页面。
我尝试在我的用户实体的__construct()
方法中添加这样的内容,但它不起作用:
if($this->getUsername()=='johndoe') $this->addRole('ROLE_ADMIN');
当我以该用户身份登录时,调试实用程序仅显示“ROLE_USER”,但它不起作用。
这是正确的代码吗?我应该把它放在哪里?
更新
偶然发现了一个愚蠢的错误。我在调用FOSUserBundle之前创建了User实体,不知怎的,我试图提升的用户通过CLI给了我错误。也许它没有正确存储在数据库中。一旦我创建了一个新的并再次尝试,该命令就能按预期工作。
答案 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"]