2011-05-02 2 views
1

사용자가 시스템에서 하나 이상의 역할을 가질 수 있다고 상상해보십시오. 로그인 후에 사용자는 이러한 역할을 선택해야합니다. 이 시점에서만 이 선택된 역할은 봄 보안으로 검사해야합니다.스프링 보안 - 하나의 활성화 된 역할

사용자는 ROLE_A, ROLE_B

requestmaps 있습니다

는 는

/책/** -> ROLE_A는 ROLE_B는 /저자는 **/-> 역할 정상적인 동작이 사용자가 액세스 할 수있는 일 것

정의 된 모든 작업. 내 특별한 경우 사용자는 ROLE_A를 선택한 다음/author/** 액션에 대해서만 액세스 권한을 얻습니다. 즉, 은 보안 컨텍스트에서 하나의 활성 역할을 정의 할 수 있으므로 보안은이 단일 역할을 기반으로 보안 검사를 수행합니까?

답변

2

최종 사용자 입장에서이 접근법을 피하는 것이 좋지만, 때로는 통제에서 벗어나는 요구 사항이 있음을 이해합니다. 당신이 선택한 역할을 지정된 곳 속성을 정의하면

Set<Role> getAuthorities() { 
    PersonRole.findAllByPerson(this).collect { it.role } as Set 
} 

, 그냥에만 위의 방법을 수정 : 그렇게 말 그래서, 당신은 봄 보안에 대해 정의 한 Person 객체는 다음이 포함되어야 사용할 수 있습니다 그 역할을 되 돌린다.

+0

이 솔루션을 이용해 주셔서 감사합니다! 내 접근 방식은 로그인 후 사용자 detial 클래스의 기관 컬렉션을 수정하여이 컬렉션에 하나의 역할 만 존재하도록하는 것이 었습니다. 사용자는 또한 역할을 바꿀 수 있습니다. 현재이 컬렉션을 다시 수정해야합니다. – hitty5