2012-11-13 2 views
0

CRUD jsf 응용 프로그램에서 소유자는 개체와 같은 레코드를가집니다.개체가 사용자에게 속한 경우에만 사용자가 메서드를 호출 할 수 있습니다.

소유자가 직접 만든 개체 만 보거나 편집하거나 삭제할 수 있기를 바랍니다. 이를 달성하는 한 가지 방법은 모든 메소드에서 로깅 된 사용자가 오브젝트를 작성했는지 확인하는 것입니다.

은 많은 유사한 방법과 목적이있을 수있다, 그래서 내가 대신 모든 방법에

if (selectedObject.owner == loggedUser) 

문구를 사용하는 다른 우아한/자동 방법을 사용하고 싶습니다.

가능하면 어떻게 할 수 있습니까? 내가 당신이라면

+0

이것은 나에게 우아한 해결책처럼 보입니다. 당신이 추가 할 수있는 유일한 것은 약간의 추상화이지만, 지금은 그것을 통과하지 않을 것입니다. – nyxz

답변

2

액세스 보호를 위해 aspect oriented programming을 사용할 수 있습니다.

액세스 제한 메소드에 대한 모든 메소드 호출을 가로 채기 위해 의 조언을 적용한 후 advice가 실패하면 예외를 throw합니다. 프로그램의 구조에 따라 명시 적 주석을 찾거나 다소 일반적인 pointcut을 사용합니다.

이것은 당신의 if (obj.owner.equals(loggedUser)) 하나의 중심 장소를 이동,하지만 물론 당신은 여전히 ​​

는 ""자바 화면 구현이 AspectJ 등등 목록에 다른 사용자의 항목을 포함하지 않도록주의해야 할 것입니다. 또한 이미 사용하고있는 Spring 프레임 워크에서 사용하고 지원합니다. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html

0

나는 은 사용자가

rendered={user.isOwner} 

를 사용하여 권한이 부여 된 경우에만 구성 요소가 당신이 구성 요소의 속성으로 사용할 것 보여줄 것입니다.

+0

보안 문제로 인해 렌더링 된 속성을 사용하고 싶지 않습니다. 모든 사람이 게시 된 데이터를 변조 할 수 있으므로 변경하고 다시 게시하십시오. 그것은 보안 허점입니다. 그것은 메서드 호출을 방지합니다. – nsumer

관련 문제