2009-07-15 7 views
6

나는 Separation of Concerns를 가능한 한 강력하게 유지하려고 애 쓰고있는 응용 프로그램을 만들고 있습니다. 우리는 보안에 대한 교차 관심이 여러 가지 합병증을 유발한다는 사실을 발견했습니다.AOP 및 UI 요소에 보안 적용

그러나 속성 및 Aspect-Oriented Programming을 사용하여 완화 할 수있는 것처럼 보입니다.

도메인 계층 코드에 요소를 적용하는 것으로 알고 있지만 UI 요소에 적용하려면 어떻게해야합니까? 예를 들어 사용자가 해당 기능을 실행할 수있는 권한이 없을 때 버튼을 표시하지 않으려면 어떻게해야합니까?

<% if (user.CanSeeSomeData) { <%=Html.TextBox("MyTextBox") } %> 

을하지만 우리는 속성 라 AOP 가능한 경우에 표시를 제어하고 싶습니다 : 우리의 MVC 응용 프로그램에서

,이 시점에서 우리는 (의사 코드는 다음) 작성해야 할 것입니다.

아이디어가 있으십니까?

또한 유용 할 타사 오픈 소스 도구가있는 경우 해당 제안을 환영합니다.

답변

1

나는보기가 많은 프로그래밍을 포함하지 않아야한다고 말하고 싶다. P가 금지되어있는 장소에서 AOP (또는 la AOP)를 사용하는 아이디어는 좋지 않습니다.

다른 방식으로 디자인 해 보겠습니다. 일반적으로보기에는 조건 및 루프와 같은 기본적인 작업을 수행하는 몇 가지 제어 키워드가 있습니다. 더 많은 지능과 나는 당신이 컨트롤러 역할을 혼합하고 있다고 말하고 싶습니다.

실제로는 간단한 플래그 인 경우 if (user.CanSeeSomeData)을 넣으십시오. 그것은 전망이 있어야하는 방식입니다.

모델 뷰 객체 (뷰에 대한 정보를 넣는 컨테이너)를 제작할 때. 예를 들어 AOP를 사용하여 해당 속성의 멋진 속성으로 정보를 초기화/설정할 수있었습니다.

당신은 대신 "IFS"

[UserCanSeeData] 
<%=Html.TextBox("MyTextBox") %> 

이 문법 설탕, 진짜 AOP 모양의 속성을 요청할 수 있습니다. UserCanSeeData가 if보다 많은 권한 (사용자 권한 확인을위한 데이터베이스 액세스 권한)을 가져야한다고 말하는 시도는 컨트롤러 코드를 뷰로 이동하려는 시도입니다.

+0

답장, 감사에 감사드립니다. 그래서, 당신은 속성 접근 방식이 괜찮다고 말하고 있습니까? Conroller/ViewModel에서 수행되어야합니다. if 문은 그것을 수행하는 방법입니다. * [ "보기가 있어야하는 방법입니다.] * – jlembke

+0

또한, 어떻게 ViewModel에서이 작업을 수행 할 수 있습니까? 속성에 특성을 넣을 수는 있지만 양식 항목을 표시/숨기기/사용 불가능으로 변환하지는 않습니다. 내가 컨트롤을 숨기려고하지 않고 ViewModel/Controller에서 액세스 위반을 처리해야한다고 말하고 있습니까? – jlembke

관련 문제