2010-04-29 6 views
7

저는 스프링 보안 ACL을 포함하는 프로젝트를 만들고 있습니다. 생성 권한이 BasePermission.CREATE입니다. 누군가가 이것이 어떻게 작동해야하는지 또는 누군가가 할 수있게 해주는 것을 설명해 주시겠습니까?누군가가 스프링 보안 BasePermission을 설명 할 수 있습니까? 생성 하시겠습니까?

각 개체에는 acl이 있고 각 acl에는 많은 에이스가 있고 각 에이스에는 sid와 권한이 있다는 것을 알고 있습니다. acl을 첨부하기 위해 객체를 생성해야하는 경우 어떻게 객체를 생성 할 권한을 부여 할 수 있습니까?

답변

7

스프링 보안은 ObjectIdentity 인터페이스를 통해 도메인 개체에 대한 사용 권한을 간접적으로 부여합니다.

당신은 언급으로, 지금까지 일반적인 경우는 도메인 개체의 ObjectIdentityImpl를 구축 한 후 만들거나 먼저 도메인 오브젝트를 확보하고 있다는 점이다 기준 :

MyDomainObject secured = new MyDomainObject(); 
ObjectIdentity securedIdentity = new ObjectIdentityImpl(secured); 

당신은 다음을 검색 할 ObjectIdentity 인스턴스를 사용 ACL은 스프링 보안 프레임 워크를 사용합니다.

그러나 개체 ID를 사용하는 유일한 방법은 아닙니다. 실제 비즈니스 오브젝트가 아닌 objectIdentity에 대한 참조를 전달할 수 있지만, 작성된 경우이를 식별하는 수단이 있습니다.

예를 들어 파일을 보호하려고한다고 가정 해보십시오. 보안되고있는 java.io.File 인스턴스로 ObjectItentity를 생성 할 수 있습니다. ID에있는 File 객체는 파일에 대한 참조 일 뿐이며 실제 파일은 없습니다. 파일이 존재하지 않을 수도 있지만 우리는 보안에 대한 이유와 ACL을 가져올 수있는 ObjectIdentity를가집니다.

이 패턴은 모든 종류의 도메인 개체에 적용 할 수 있습니다. 보안을 유지하는 데 필요한 도메인 기능과 관련하여 도메인 개체를 설명하지만 실제로 도메인 개체에 대한 참조가 필요하지는 않은 DomainObjectPrototype 구현을 만듭니다. 이 서비스는 도메인 객체를 실제로 만들 때 필요한 세부 정보로 생각할 수 있습니다.

추신 : 절대로 스프링 보안을 사용 해본 적이 없다고 고백하자. example을보고 나면 설계 패턴이 나에게 분명 해 보인다.

EDIT : 원래대로 쓴대로 ObjectIdentity의 구현을 만들 필요가 없습니다.

+1

답변 해 주셔서 감사합니다. 나는 명확히하고 싶다. Widget 클래스의 생성을 제한하려면 다음과 같이 할 수 있습니까? ObjectIdentity securedIdentity = new ObjectIdentityImpl (위젯. 클래스, 위젯.RESERVED_CLASS_ID); 그런 다음 작성 권한이 일부 sid에 허용되었는지 확인합니다. –

+1

액세스 제어가 위젯 클래스의 특정 인스턴스에 종속되지 않으면이를 수행 할 수 있습니다. 인스턴스 별 컨트롤이 필요한 경우 액세스 제어를 정의하는 데 필요한 도메인 특성을 포함하는 WidgetPrototype 클래스를 만듭니다. – mdma

0

더 광범위하게 생각하면 클래스와 인스턴스라는 두 가지 유형의 권한이 있습니다. 객체 생성은 클래스 권한입니다. 새 인스턴스를 만들 권한이 있습니다. 개별 인스턴스에 적용하려고하면 의미가 없습니다. 읽기 권한은 둘 중 하나 일 수 있습니다. 모든 인스턴스를 읽을 수있는 권한을 가질 수도 있고, 명시 적으로 열거 된 인스턴스를 읽을 수있는 권한을 가질 수도 있습니다.

당신이 고전적인 "깜짝 생일 파티 이메일"문제를 생각해 본 적이 있다면 혼란 스러울 것입니다. 이것은 깜짝 생일 파티를 계획하기 위해 생일 남학생을 제외하고 모두에게 보낸 사무 이메일입니다. 이 경우 전자 메일 메시지를 만들고 보내는 데 CREATE 권한이 필요하며 모든 사람이 메시지를 읽을 수있는 클래스 읽기 권한이 있습니다. 그러나 한 사람이 DENY READ 권한을 가지고있어서 그 사람 만이 메시지를 읽을 수 없습니다.

+0

CREATE 권한이 필요하다는 것을 알고 있습니다. 제 질문은 봄 보안에 사용하는 방법이었습니다. 그래도 감사합니다. –

관련 문제