2012-06-04 2 views
1

내 응용 프로그램에는 조직이라는 최상위 엔티티가 있습니다. 사용자와 조직 간의 관계는 다 대 다수입니다.스프링 보안 사용자 역할 당 조직

이의 나는 다음과 같은 시나리오를 가질 수 있기 때문에 :

  • 사용자 A는 OrganizationA에 대한 역할 ROLE_ADMIN을 가지고
  • 사용자 A는 내가 사용자 A가 리소스에 액세스 할 때 확인해야 OrganizationB

에 대한 역할 ROLE_USER있다 OrganizationB에서 그는 ADMIN으로하지 않습니다. 따라서 사용자가 조직 수준에서 올바른 역할을 수행하고 있는지 확인해야합니다. 이것을 허락하는 Spring Security에 내장 된 것이 있습니까? 그렇지 않다면 누가 이것을 해결하는 것이 가장 좋은 방법인지 알 수 있습니까?

UPDATE : 좀 더 정보 ...

사용자가 로그인하고 작업 할 조직하는 선택합니다. 그것은 세션에 저장됩니다. 그 외에도 URL은 Secured 주석으로 잠겨 있습니다. 즉 UserA가 로그인하여 OrgA를 선택하면/admin/user/create에 액세스 할 수 있어야하지만 로그인하면 OrgB를 선택하면 해당 URL에 액세스 할 수 없습니다.

중요한 것은 모든 방법에서 추가 검사를하는 것입니다. "ok, OrgB의 관리자는 아니지만 OrgB의 관리자이고 OrgB를 사용하여 로그인 했으므로이 요청을 거부합니다"라는 서비스 메소드를 호출하십시오.

이 문제를 처리하는 데 더 많은 grails/spring-security 방법이 필요합니다.

+0

여기에 더 많은 정보를 입력해야합니다. 그렇지 않으면 구체적인 접근 방법을 제안하기가 어려울 것입니다. 서로 다른 조직의 자원을 차별화하는 요소는 무엇입니까? –

+0

관리자 또는 OrganizationA로서 사용자를 생성 할 수 있습니다. OrganizationB에서 UserA를 허용하고 싶지 않습니다. 그런 종류의 물건. – Gregg

+0

좋아, 내가해야 할 말은 "앱이 다른 리소스를 어떻게 구별합니까?"입니다. 이 문맥에서 "자원"이란 무엇입니까? 다른 조직에 대해 서로 다른 URL을 사용합니까? –

답변

2

사용자 지정 AccessDecisionVoter을 사용하여이 작업을 수행 할 수 있습니다. vote 메소드는 리소스 (메소드 또는 URL)에 대한 "구성 속성"을 제공하며 이는 일반적으로 필수 역할이며 Authentication 객체에서 직접 현재 사용자의 역할/권한을 얻거나 현재 org를 선택하고 사용자에게 적절한 역할을 선택하십시오.

내가 선택한 조직에 따라 사용자의 역할을 구분할 수있는 방법이 있다고 가정합니다.

본질적으로 조직을 고려한 표준 RoleVoter의 확장 버전을 작성하게 될 것입니다.

+0

아, 그래. 이것은 의미가 있습니다. 나는 가서 다시보고 할 것이다. 정보 주셔서 감사합니다. – Gregg

0

이 늦어서 여기 작은라고 생각하지만, 이것은 나를 위해 일한 것입니다 :

조직을 선택하면, 당신은 당신의 세션에서 새로운 역할 (이전 Authentication 객체가 무효화됩니다로 새로운 인증 객체를 설정할 수 있습니다). 다음과 같은 내용 :

관련 문제