2011-02-01 3 views
2

나는 스프링 보안을 사용하여 인증을 처리하는 GWT 애플리케이션을 개발 중이다. 내 응용 프로그램에는 각각 다른 역할을 가진 5 명의 사용자가 있습니다.계층 적 권한에 가장 적합한 스프링 보안 ACL 옵션

  1. 슈퍼 유저 - 이것은 사이트 소유자이며 모든 것에 대한 읽기 권한을 가지고 있습니다.
  2. 학교 소유주 - 신청서를 사용할 학교를 소유하고있는 사람입니다. 이 사용자는 모든 학교에 액세스 할 수 있습니다.
  3. 지구 관리자 - 사이트 소유자의 직원으로 해당 지역의 학교에 대한 읽기 권한이 있습니다. (한 구역은 많은 학교가있는 물리적 인 구역 임)
  4. 학교 관리자 - 특정 학교를 관리하고 해당 학교의 모든 자료를 읽고 쓸 수 있습니다. 접근은 학교 주인이합니다.
  5. 강사 - 학교 관리자가 지정한 특정 영역에만 읽기 및 쓰기 권한이 있습니다.

필자는 이러한 보안 모델을 구현하는 여러 가지 방법을 살펴본 나는 봄 보안을 사용하여 해결하는 두 가지 방법 사이에 찢겨있어, 처음 설명한 바와 같이 4 데이터베이스 ACL 테이블을 사용하여 그 일의 복잡한 방법이 on denksoft blog

다른 방법은 Spring 보안 표현식 언어를 통해 표현식 기반 액세스 제어를 사용하는 것이고 훨씬 쉽고 별도의 데이터베이스 테이블을 필요로하지 않습니다.

내 질문은, 내가 성취하고자하는 것에서 어떤 옵션을 사용하는 것이 더 좋으며 더 나은 결과를 얻을 수 있습니다. 첫 번째 옵션 (데이터베이스 ACL 테이블 사용)을 사용하면 더 많은 사용자 정의가 제공된다고 가정합니다. 나는 RoR 배경에서 왔고 왜 이렇게 많은 테이블을 필요로하는지 궁금해. Expression Language 옵션은이 시나리오에서 실행 가능한 솔루션입니까? 그리고 만약 이것에 대한 좋은 출발점/튜토리얼이 있습니까? 조언은 높이 평가됩니다.

답변

3

ACL이 과도한 상황 일 수 있습니다.

권한 부여를 검토 한 결과, 예를 들면, 스프링 EL은 충분해야한다 : 역할이 계층 인 경우

@PreAuthorize("hasRole('ROLE_School-owner') or hasRole('ROLE_School-manager')") 

는 다음 일, 당신이 한 번 그룹 역할보다 쉽게 ​​얻을 간접 하나 개 더 수준을 사용하여 :

그룹 "학교 소유자"역할 ROLE_School 소유자 + ROLE_School 매니저 + ROLE_Instructor

그룹 "학교 관리자"역할 ROLE_School 매니저 + ROLE_Instructor

당신은 학교 관리자 권한을 확인해야 할 경우

그런 다음, 당신은 단지 그 역할을 확인해야합니다 해당 그룹도 가지고 있기 때문에 이것은 또한, 그룹 "학교 소유자"의 사용자에게 권한을 부여합니다

@PreAuthorize("hasRole('ROLE_School-manager')") 

학교 관리자의 역할이 지정되었습니다.