2011-02-22 1 views
1

ASP.NET MVC의 권한 부여 속성을 좋아합니다. 속성 그 자체가 아니라 적용하는 방식.비즈니스 로직에서 AOP 스타일 MVC와 비슷한 권한 부여를 사용하는 가장 좋은 무료 방법

내 ASP가 아닌 MVC 서비스 계층에서 사용하고 싶습니다. 보통 C# 비즈니스 논리 라이브러리 나 적어도 내 WCF 서비스 끝점의 끝점에서는 사용하지 않는 것이 좋습니다. PostSharp 내 유일한 대답입니까 아니면 무료로 비슷한 솔루션입니까?

답변

1

나는 비슷한 상황에 처해 있으며 최근에 꽤 많은 옵션을 연구했습니다.

.NET과 AOP를위한 몇 가지 오픈 소스 프로젝트가 있지만 대부분 포기하거나 매우 활발한 것 같습니다. 포스트 샤프는 지금까지 가장 성숙했습니다. 무료이며 상용 개발에 사용할 수있는 커뮤니티 에디션이 있습니다. (예 : PostSharp 등)

다른 정적 직공 :

  • AspectDNG (2008 년 이후 업데이트되지 않습니다) (포기)
  • 그리퍼-LOOM
  • AOP.NET
(포기 것으로 보인다)

다른 옵션은 대신 동적 프록시를 사용하는 것입니다. 이 기술을 사용하는 라이브러리가 몇 개 있지만 Spring.NET을 제외하고는 거의 죽은 것처럼 보입니다.

하지만, 나는 완전히 확신하지 못한다.

낮은 수준에서 작업하는 것을 염두에두면 항상 PostSharp처럼 어셈블리를 다시 작성할 수있는 Mono.Cecil이 있지만 권장하지는 않습니다. 그것은 많은 일이 될 것이고 옳은 길로 가기가 어렵습니다.

예를 들어 Castle.DynamicProxy 또는 LinFu를 사용하여 동적 프록시를 생성하는 것이 더 좋은 방법 일 수 있습니다. 그러나 모든 것이 작동하도록 만드는 것은 여전히 ​​많은 배관 작업이 될 것입니다. 또한 IoC 컨테이너를 이미 사용하고있는 경우가 아니라면 필요할 때 프록시를 삽입하는 것이 훨씬 쉬워 질 것이라고 생각할 수도 있습니다. OnMethodInvocationAspect 또는 PostSharp와 유사한 기능을 사용하는 것과 비교하면 훨씬 더 많은 작업이 수행됩니다.

내가 필요로하는 모든 것을하기 때문에 PostSharp (Community Edition)를 사용하는쪽으로 기울어 져 있으며 사용하기가 쉽습니다. Spring.NET은 다소 흥미롭지 만 역동적 인 프록시 기반 솔루션은 PostSharp만큼 우아하거나 사용하기 쉽지 않습니다.

0

거기에 몇 가지 해결책이 있습니다 - 여기에 오픈 소스 및 상용 제품의 list가 있습니다. 더 이상 존재하지 않는 것만이 AspectSharp입니다. 링크가 깨졌습니다. 이들 중 대부분은 1 년 내에 업데이트되지 않았지만 시작일 수 있습니다. PostSharp도 목록에 있습니다.

희망이 도움이됩니다.

0

Microsoft의 Unity는 메서드 차단을 통해 AOP 코드를 작성하는 기능을 제공합니다.인터셉터 방식으로 인터셉터 방식의 속성을 검사하면 원하는대로 정확하게 수행 할 수 있습니다.

당신은 유니티 차단에 대해 읽을 수 있습니다 here

0

NDecision 구현하기가 의사 결정 트리의 비즈니스 로직은 매우 간단합니다, 당신은 작은 오이 구문의 팬이고 유창함 코딩 관행 경우 당신은 그것을 사용하여 집에 온 것처럼 편안합니다 . 아래의 코드 스냅 샷은 프로젝트 사이트에서 가져온 것으로 비즈니스 로직을 구현하는 방법을 보여줍니다. NDecision.Aspects은 NDecision 위에있는 AOP 계층입니다. NDecision.Aspects은 실제로 PostSharp 속성을 사용하고 코드 실행을 동적으로 가로 채서 매개 변수 (또는 실행중인 메소드를 소유하는 객체)로 전달되는 객체에 비즈니스 규칙을 적용합니다.

다음 스크린 샷의 코드는 별도의 클래스에서 비즈니스 로직을 작성하는 방법을 보여줍니다

: 다음

enter image description here

당신이 중 하나를 사용하여 사양 (비즈니스 규칙)의 자율적 인 응용 프로그램을 활성화 NDecision.Aspects 속성 :

enter image description here

또는를 대상 유형에 방법에 속성을 적용하는 귀하의 사양에 ifications이 적용

enter image description here

당신이 당신과 다른 어셈블리를 가질 수없는 이유가 없습니다 "의사 결정 트리." NDecision은 논리를 하나의 독립된 계층으로 분리하기 위해 작성되었으며, NDecision.Aspects 부분은 필요에 따라 이러한 규칙을 적용 할 수 있습니다.

0

PrincipalPermissionAttribute은 ASP.NET MVC 자신의 AuthorizationAttribute에 가깝습니다. 액션 대신에 메쏘드를 장식하는 것을 제외하고는 같은 방식으로 사용합니다. 그것은 당신이, 또는 단순히으로 사용자 이름으로 사용자 역할의 접근을 요구 할 수 있습니다 그녀는 인증 여부 여부 :

[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")] 
public void YourMethod() 
{ 
    // do something 
} 

사용자 이름이 입니다 :

사용자 관리자에 역할을 속 존 :

[PrincipalPermission(SecurityAction.Demand, Name = "john")] 
public void YourMethod() 
{ 
    // do something 
} 

사용자가 본격입니다 icated : Thread.CurrentPrincipal가 액세스 스펙과 일치하지 않는 경우

[PrincipalPermission(SecurityAction.Demand, Authenticated = true)] 
public void YourMethod() 
{ 
    // do something 
} 

다음은 System.Security.SecurityException을 던져.

관련 문제