Symfony,“超级”管理员用户,密码为硬编码

时间:2017-11-06 15:19:55

标签: php symfony

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

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

所以这就是这个想法: 如果用户名为 tech 且密码为 xyz ,则用户 admin ,并且必须设置自定义角色。

我按照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>

1 个答案:

答案 0 :(得分:0)

如果您想使用主密码登录,可以通过在security.yml创建内存用户来完成此操作

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

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

否则尝试刷新用户......