Symfony,"super"具有硬编码密码的管理员用户



我有一个Symfony 3.3应用程序,用户按照手册存储在数据库中,具有普通的用户实体。

我需要能够以"admin"身份登录(始终是id=2的用户),但使用固定的"主"密码进行硬编码(其哈希值,而不是纯文本)。

所以这个想法是这样的:如果用户名为 tech,密码为 XYZ,则必须登录用户管理员,并且必须设置自定义角色。

我已经尝试了这里描述的方法,我做到了:

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角色,并且未设置自定义名称(我不知道这是否可能,如果不是,则不是那么重要)

如果您想使用主密码登录,您可以通过在security.yml上创建一个内存用户来实现

in_memory:
    memory:
        users:
            tech: {password: encoded_password, roles:['ROLE_TECH','ROLE_SUPER_ADMIN','.....']}

或者,您可以将其存储在数据库中并为其分配适当的角色。如果您不希望用户/角色可用于任何操作,也可以使用一些布尔属性对其进行标记。你正在使像getRoles()这样的方法对于一个用户来说有点复杂。

否则尝试刷新用户...

最新更新