2013-02-27 3 views
6

내 응용 프로그램에서 백엔드에서 사용자 권한 및 역할을 변경할 수 있습니다.사용자 권한이 변경된 후 강제 재 인증

사용자가 로그인하여 사용자의 역할을 제거하면 역할을 잃어 버렸기 때문에 사용자가 실제로 액세스 할 수없는 콘텐츠에 계속 액세스 할 수 있습니다. 변경 사항은 사용자가 logout/login으로 재 인증 한 경우에만 적용됩니다.

제 질문은 로그인 한 사용자 (나 아닌)의 세션에 액세스 할 수 있습니까? 나는 내 자신의 세션에 액세스하여 그것을 파괴 할 수 있다는 것을 알고 있습니다. 다시 로그인하게합니다. 하지만 로그인 한 모든 사용자의 세션을 가져오고 싶습니다. 가능합니까? 그것에 대해 어떤 자원도 찾을 수 없었습니다.

PdoSessionStorage을 symfony2.1 및 fosuserbundle과 함께 사용합니다.

+0

또한 대답없이 여기에 있습니다. http://stackoverflow.com/questions/14184484/how-to-administratively-invalidate-a-session-that-used-remember-me-option – MDrollette

+0

@MDrollette 나는 이것이 답을 얻지 못할 것 같아. 유일한 해결책은 맞춤 세션 관리자가 될 수 있다고 생각합니다. –

+0

세션 ID와 함께 세션 ID와 함께 사용자 ID를 저장해야합니다. 특히 어렵다고 들리지는 않지만 최선의 접근법이 확실하지 않습니다. – MDrollette

답변

9

Symfony\Component\Security\Core\User\EquatableInterface 사용자 클래스를 구현하십시오.

isEqualTo() 메서드에서 false을 반환하면 사용자가 다시 인증됩니다. 이 메소드를 사용하여 변경 될 때 재 인증을 강제해야하는 등록 정보 (예 : 역할) 만 비교하십시오.

+0

+1 알겠습니다. 이 수표를 어디에서 확인해야합니까? 나는 모든 요청에 ​​그것을 만들어야 만합니까? –

+0

사용자 클래스가 인터페이스를 구현하도록하십시오. 당신은'isEqualTo()'메소드를 강제로 구현할 것이다. 나머지는 Symfony에서 처리합니다. –

+0

위대한 작품입니다!) –

-1

당신은 내가 무슨 짓을했는지 유사한 접근 방식에 따라이 문제를 해결 얻을 수 있습니다 :

  1. 하는 경우에 사용자가 로그인 할 때, 그 권한의 검사와 함께 세션의 모든 권한을 저장합니다.
  2. 해당 체크섬을 해당 사용자 ID에 대해 데이터베이스 또는 디스크에 저장하십시오.
  3. 사용자가 요청할 때마다 디스크의 체크섬이 해당 사용자의 세션 체크섬과 일치하는지 확인하십시오. 다른 경우 사용 권한을 사용자 세션에 다시로드하십시오.
  4. 사용 권한을 변경하면 해당 사용자에 대해 저장된 데이터베이스 (또는 디스크)의 체크섬을 업데이트하십시오. 그러면 다음 요청시 다시 동기화가 시작됩니다.
+0

흠은 복잡하지만 복잡해 보인다. 이게 당신이 개발하는 헬프 데스크일까요? –

+0

@artworkad는 서비스 컨테이너, 보안 컨텍스트, 요청 객체와 같은 기본 symfony2 구성 요소를 사용하여 사용 권한을 결정합니다. – JamesHalsall

+0

@Jaitsu, 심포니 내장 솔루션은 너무 단순하므로 히스테리 웃을 것입니다. 내 대답을 보라. ;) –