まず、私は FOSUserBundle を使用していません。独自のモデル レイヤー (Doctrine/Mongo/何もない) と他の非常にカスタムな動作を持つレガシー システムを移植しているため、使用できません。
コントローラーとビューでネイティブの symfony セキュリティを使用できるように、従来のロール システムを Symfony のシステムに接続しようとしています。
私の最初の試みはgetRoles()
、Symfony\Component\Security\Core\User\UserInterface
. 最初は、うまくいったように見えました。しかし、詳しく調べてみると、これらのロールはユーザーがログインしたときにのみ更新されることに気付きました。これは、ユーザーにロールを付与または取り消す場合、変更を有効にするためにユーザーはログアウトしてから再度ログインする必要があることを意味します。ただし、ユーザーからセキュリティ ロールを取り消す場合は、それをすぐに適用する必要があるため、その動作は受け入れられません。
私が Symfony に求めているのは、すべてのリクエストでユーザーのロールをリロードして、それらが最新であることを確認することです。カスタム ユーザー プロバイダーを実装しました。そのrefreshUser(UserInterface $user)
メソッドはすべてのリクエストで呼び出されていますが、ロールが何らかの理由で更新されていません。
UserProvider でユーザーをロード/更新するコードは次のようになります。
public function loadUserByUsername($username) {
$user = UserModel::loadByUsername($username); // Loads a fresh user object including roles!
if (!$user) {
throw new UsernameNotFoundException("User not found");
}
return $user;
}
(refreshUser
似てる)
リクエストごとにSymfonyにユーザーロールを更新させる方法はありますか?