私はSymfony 3.3アプリケーションを持っていて、dbには通常のユーザエンティティがmanualとして保存されています。symfony、ハードコードされたパスワードを持つ "super"管理者
「管理者」(常にID = 2のユーザー)でログインできるようにする必要がありますが、ハードコードされた固定マスターパスワード(プレーンテキストではないハッシュ)が必要です。
だから、これはアイデアです: usernameはハイテクで、パスワードがXYZであれば、ユーザー管理がログインしている必要があり、カスタム役割を設定する必要があります。
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の役割は付与されておらず、カスタム名は設定されていません(それが可能かどうかわかりませんが、それほど重要でない場合)
FOSuserBundleを使用していますか?はいの場合、cliコマンド 'bin/console fos:user:promote admin ROLE_TECH'はどうでしょうか?この種のロジックでは、getRolesメソッドを変更しないでください。これはセキュリティのrole_hierarchy部分の目標です。https://symfony.com/doc/current/security.html#hierarchical-roles – Mcsky
私はFOSを使用していません。とにかく私は管理者を昇進させたくありません。管理者は私たちのクライアント(SaaSサービス)です。彼はいつでもパスワードを変更することができますが、テクニカルチェックのためにマスターパスワードでログインできる必要があります –