2013-02-18 1 views
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은 사용자가 로그인하고 User 클래스 내 security.context에로드 된 후 LdapUserVerifierService::loadUser 만 호출됩니다 의미 false로 설정됩니다.

그럼 내가 가진 내이 같은 LdapUserVerifierService::loadUser 다음 security.context.getToken().getUser() 내 사용자의 변경 (예를 들어 /login_check에서 /dashboard에) 페이지, 내 수정이 손실 될 때마다 것을 제외하고, 좋은 작품

public function loadUser(LdapUserEvent $event) { 

    $ldapUser = $event->getUser(); 

    [...] 

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

} 

. 내 사용자의 및 ROLE_USER/login_check에 연결되어 있지만 /dashboard에는 연결되지 않습니다.

내 사용자가 내 앱의 데이터베이스에서로드되지 않았기 때문에 데이터베이스에 저장하여 이후 페이지에로드 할 수 없으므로 다른 세션 변수에 저장하지 않고 개체 변경 사항을 유지할 수 없습니다.

아무도 내가 이것을 처리해야하는 것을 알고 있습니까?

감사합니다.

+0

'SecurityContext'를 수정 한 코드를 보여줄 수 있습니까? – cheesemacfly

+0

이벤트 토큰에 대한 변경 사항은 둘 다 동일한 토큰 개체를 가리 키기 때문에 보안 컨텍스트 토큰에 유지되어야합니다. 나는 명시 적으로 security_context에 변경 사항을 저장하지 않습니다. 나는 setToken 또는 뭔가 부를 수 있다고 생각합니다. 내가 한번 시도해 보자. –

+0

아니요. 오류가 남아 있습니다. 'kernel.event_listener'에 리스너를 추가하고 모든 작업에서 권한을 다시로드합니다. 이것은 최적의 해결 방법은 아니지만 (다른 곳에서는 찾아 볼 수 없습니다.) 다른 방법을 찾을 때까지이 방법을 계속 사용하겠습니다. –

답변

-2

더 나은 답변을 제공 할 수있는 코드가 충분하지 않지만 security.context 또는 토큰을 수정하는 위치가 표시되지 않습니다.

토큰에서 가져온 사용자 개체를 변경 한 후에는이 수정 된 사용자를 토큰으로 설정해야 할 수 있습니다.