我有一个Symfony 3.3应用程序,用户按照manual存储在具有普通用户实体的数据库中。
我需要能够以“admin”(始终是id = 2的用户)登录,但是使用固定的“主”密码进行硬编码(其哈希值,而不是纯文本格式)。
所以这就是这个想法: 如果用户名为 tech 且密码为 xyz ,则用户 admin 必须登录em> ,并且必须设置自定义角色。
我按照here的说法尝试了,我做了:
public function loadUserByUsername($username)
{
if($username == 'TECH') {
/** @var $user User */
$user = $this->createQueryBuilder('u')
->where('u.username = :username')
->setParameter('username', 'admin')
->getQuery()
->getOneOrNullResult();
$user->setUsername('⭐ TECH');
$user->setPassword('$2y$13$u...');
$user->setIsTech(true);
return $user;
}
return $this->createQueryBuilder('u')
->where('u.username = :username')
->setParameter('username', $username)
->getQuery()
->getOneOrNullResult();
}
在用户实体中:
public function getRoles() : array
{
if($this->isAdmin()) {
if($this->isTech) {
return ['ROLE_TECH', 'ROLE_ADMIN', ...];
}
return ['ROLE_ADMIN', ...];
} else {
return ['ROLE_USER'];
}
}
但它不起作用,用户以管理员身份登录,但未授予ROLE_TECH角色,并且未设置自定义名称(我不知道这是否可行,如果不是,则不是那么重要)< / p>
答案 0 :(得分:0)
如果您想使用主密码登录,可以通过在security.yml创建内存用户来完成此操作
in_memory:
memory:
users:
tech: {password: encoded_password, roles:['ROLE_TECH','ROLE_SUPER_ADMIN','.....']}
或者您可以将其存储在数据库中并为其分配适当的角色。如果您不希望用户/角色可用于任何操作,您可以使用某个布尔属性标记它。你正在为一个用户制作像getRoles()这样的方法有点复杂。
否则尝试刷新用户......