2011-09-21 5 views
2

역할 계층을 정의하는 것이 ">"할당의 이상한 .xml 표기법이라고 생각합니다. 데이터베이스 정의 된 역할 계층 구조에서 RoleHierarchy 개체를 만드는 방법이 있어야합니다.스프링 보안의 동적 역할 계층 구조

내가 열이있는 테이블 생각하고는 :

정의를 child_role_id ROLE_ID 대다 역할과 역할 사이의 관계는 말 : 어떤 역할이있다 어느 아이들? 나는 ADMIN> USER, USER> VISITOR. xml 파일에서 계층 구조가 설정되는 방식대로 부모보다 자녀를 더 좋아할 것이라고 생각합니다.

(그런데 이것은 표준 구현이 또한 ADMIN> USER 방문자 의미 USER 및 참관 등을 지원하는 경우 나 "같은 수준의"있다 궁금합니다.)

을 지금은

를 호출 할 경우
roleHierarchy.getReachableGrantedAuthorities(authentication.getAuthorities())); 

RoleHierarchy 구현 개체가 필요합니다. spring-security는 하나를 제공하지만 setter는이 이상한 문자열 표현만을 허용합니다. 데이터베이스 결과를 문자열 표현으로 변환하고 싶지 않고 일종의 트리 구조로 작업하고 싶습니다.

그래서 유일한 방법은 구현을 확장하고 rolesReachableInOneStepMaprolesReachableInOneOrMoreStepMap을 구축하기 위해 내 데이터베이스 결과 세트로 작업 할 내 자신의 설정기를 작성하는 것 같습니다.

다른 솔루션을 아는 사람이 있습니까?

포인터 또는 확인해 주셔서 감사합니다! n은 자기 RoleRole 사이의 관계를 참조 :

+0

Spring의 구현을 확장하고 사용자 정의 작성기를 작성하는 데있어서 문제점은 무엇입니까? 나는 아무 것도 볼 수 없다. – bluefoot

+0

그래, 나는 내 자신의 RoleHierarchy 버전을 구현했다. 그러나 나는이 이상한 문자열 포맷에 대해 궁금해하고있다. 그냥 대안이 없다고 생각합니다. – Pete

+0

조금 늦었지만, 궁금한 점은 봄 보안 4.0.0에서 작동합니다. 즉 A> B, A> C – allancth

답변

1

우리는 RoleHierarchy를 구현하는 UserDetailsService 내부의 계층 구조를 해결하고 m을 사용하여 우리 자신의 해결책을했다. 따라서 계층 구조는 데이터베이스에 저장되고 응용 프로그램 시작시 캐싱되며 필요시 업데이트되고 로그인시 UserDetails 개체를 만들 때 모두 GrantedAuthorities을 해결하는 데 사용됩니다.