2011-03-30 1 views
2

다음 코드 줄을 고려를 만드는 속성 실패한 전화를 어딘가에 기록하십시오. 이것은 내가 가진 모든 작업에서 그 행동을 바꾸어야한다는 것을 의미합니다.를 사용하여 사용자 지정 제의 ServiceContract의 모든 동작에 입력되는 역할 검사기

내가 대신하고 싶은 것은 내 OperationContracts에 가질 수있는 사용자 지정 특성을 만드는 것입니다 : 이것은 다음과 같을 것입니다 : [RequireMinimumRole("Administrators"].

우선, MVC의 필터 컨텍스트처럼 동작하고 싶습니다. 실제 작업이 호출되기 전 전에 역할 을 확인하고 싶습니다. 이것이 가능한가?

두 번째로, ServiceContract에 넣는 또 다른 속성을 갖고 싶습니다. RequireMinimumRoleAttribute이 특정 작업에 지정되지 않은 경우 사용되는 FallbackRequireMinimumRoleAttribute입니다.

서비스 계약

[ServiceContract] 
public class ICalculator 
{ 
    [OperationContract] 
    public int Add(int a, int b); 

    [OperationContract] 
    public string Information(); 
} 

구현

관리 priviligies을 필요로이 경우 Add에서
[FallbackRequireMinimumRole("Users")] 
public class Calculator : ICalculator 
{ 
    [RequireMinimumRole("Administrators")] 
    public int Add(int a, int b) { return a + b; } 

    public string Information() { return "This is a calculator service"; } 
} 

Information 작업은 사용자 권한 만 필요합니다.

이것이 가능합니까? 그렇다면 어떻게?

+0

어떤 인증 및 역할 프로필 메커니즘을 사용하고 있습니까? –

+0

asp.net 회원을 사용하고 있습니다. –

답변

1

여기에 한 가지 가능한 방법입니다. 작업을 파견하기 위해 원래의 호출자와 연결하기 전에 권한 부여 검사를 수행해야합니다. IOperationInvoker (포장 된 패키지)과 점검 할 역할 이름이 필요한 ctor가 필요합니다.

는 WCF 디스패처 런타임이 작성 될 때 사용자 지정 호출자의 적절한 인스턴스를 설치하려면 : FallbackRequireMinimumRoleAttributeRequireMinimumRoleAttributeIOperationBehaviorIServiceBehavior를 구현합니다. 각각의 경우 ApplyDispatchBehavior 구현은 DispatcherRuntime 개체를 탐색하여 해당 Invoker 인스턴스를 찾아서 사용자 정의 랩으로 바꿔야합니다.

1

인증 기관에 대해 잘 모르겠지만 PrincipalPermissionAttribute에서 문제를 해결할 수 있는지 확인하십시오.

DispatchOperation의 기존 Invoker을 래핑하는 사용자 정의 IOperationInvoker를 구현 : 여기에 확인 How to: Restrict Access with the PrincipalPermissionAttribute Class

+0

asp.net 멤버쉽 공급자를 사용하고 있습니다. 이에 대해 살펴 보겠습니다. 그러나 나는 여전히 사용자 정의 동작을 추가하고 내 자신의 특성을 갖고 싶습니다. –

+0

@Filip : 애트리뷰트에 비헤이비어를 추가 할 수 있으려면 Postsharp와 같은 AOP postcompilation이나 Castle 프로젝트처럼 동적 프록시가 필요합니다. 왜 그 정보를 기록하고 싶습니까? 이미 응용 프로그램의 최상위 수준에 로깅하고 있습니다.예외 유형을 구분할 수 있습니다. – Steven

관련 문제