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"]
它看起来很简单,我是 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"]