2013-04-02 5 views
1

제 질문은 도메인 객체 메소드와 findByName과 같은 동적 메소드를 보호 할 수 있습니까?Grails Spring Security ACL 도메인 객체 메소드

서비스 메소드에서는 잘 작동하지만 도메인 인스턴스 메소드 또는 도메인 정적 메소드에서는 작동하지 않습니다.

class Dummy { 
    string name 

    @PostFilter("hasPermission(filterObject, read)") 
    static List<Dummy> listDummies(){ 
     Dummy.list(); 
    } 
} 

컨트롤러에서 호출하면 listDummies는 사용자가 연결되어 있지 않아도 모든 더미를 반환합니다.

어떻게 작동합니까?

도움을 주셔서 감사드립니다.

답변

1

아니요, 불가능합니다. 어노테이션은 호출중인 클래스 인스턴스 주변에서 프록시를 생성하도록 트리거하여 작동합니다. 이것은 Grails 서비스가 Spring 빈으로 자동 등록되기 때문에 가장 편리합니다. 따라서 주석이 감지되고 프록시가됩니다. 프록시에서 메소드 호출을 작성하면 ACL 점검을 수행하고 액세스가 허용되는 경우에만 실제 메소드를 호출합니다.

정적 메소드 나 동적 Groovy 메소드 또는 Spring Bean으로 등록되지 않은 클래스의 메소드에서는이 프록시가 발생할 수 없습니다. 이 예제의 경우 주석이 달린 서비스 메소드를 작성하십시오. 모든 코드를 도메인 클래스에 그대로 두거나 동적 찾기를 사용할 수도 있지만 중요한 것은 프록시 된 서비스를 통해 액세스가 이루어지는 것입니다. 일단 확인이 이루어지면 원하는 곳 어디에서나 로직을 구현할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 대안을 찾겠지 만 여전히 도메인 개체 수준에서 보겠습니다. 내가 찾은 것을 올릴거야. – Fiftoine

+0

도메인 객체 동적 메서드를 래핑하기 위해 서비스를 사용해야하는 것은 너무 나쁩니다 ... 훌륭한 Grails 기능을 잃어 버리는 것과 같습니다 ... – Fiftoine

+0

구현은 Grails에 대한 인식이없는 스프링 보안에 있습니다. 아주 Grails 친화적 인 방법으로 ACL 지원을 다시 구현할 수 있습니다. :) –

관련 문제