3

IMAG / Ldap-Bundle(BorisMorel / LdapBundle)を使用してユーザーを認証してUserいますが、LDAPサーバーに加えられた変更を永続化できません。しかし、ユーザーがログインするときはいつでも、ローカルでいくつかのものをチェックし、いくつかのルールに従ってユーザーの役割を追加する必要があります。

imagがLDAPサーバー上のユーザー/パスワードを確認するたびに、「bind」イベントをリッスンしている私が作成したサービスを呼び出します。方法は次のとおりです。

ldap_user_verifier:
    class: MyBundle\Service\LdapUserVerifierService
    arguments: [ @security.context, @doctrine.orm.default_entity_manager, @twig ]
    tags:
        - { name: 'kernel.event_listener', event: imag_ldap.security.authentication.pre_bind, method: loadUser }

注:bind_username_beforeはに設定されています。これは、ユーザーがログインし、クラスがにロードされた後にのみ呼び出されることfalseを意味します。LdapUserVerifierService::loadUserUsersecurity.context

それから私はLdapUserVerifierService::loadUserこのようなものを持っています:

public function loadUser(LdapUserEvent $event) {

    $ldapUser = $event->getUser();

    [...]

    $ldapUser->setLocalUser($localUser);
    $ldapUser->addRole('ROLE_USER');
    [...]

}

ユーザーがページを変更するたびに(たとえば、から)、への変更/login_checkが失われることを除いて、これはうまく機能します。私のユーザーはにとを関連付けていますが、にはありません。/dashboardsecurity.context.getToken().getUser()localUserROLE_USER/login_check/dashboard

ユーザーがアプリのデータベースから読み込まれないため、後続のページヒットで読み込まれるようにデータベースに永続化できません。したがって、別のセッション変数を保存せずにオブジェクトの変更を永続化することはできません。

誰かが私がこれを処理することになっていることを知っていますか?

ありがとうございました。

4

1 に答える 1

-2

より良い答えを提供するのに十分なコードがないだけですが、security.contextまたはトークンをどこで変更するかわかりません。

トークンから取得したユーザーオブジェクトに変更を加えたら、おそらくこの変更されたユーザーをトークンに設定する必要があります。

于 2013-02-21T18:40:48.607 に答える