CodeAccessSecurity
을 기반으로하는 사용자 지정 권한 기반 선언 권한 부여 메커니즘을 사용할 계획입니다. 내가 이런 식으로 사용CodeAccessSecurity를 사용하는 WCF 선언적 보안
[Serializable]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class RequirePermissionAttribute : CodeAccessSecurityAttribute {
private static readonly IPermission _deny = new SecurityPermission(PermissionState.None);
private static readonly IPermission _allow = new SecurityPermission(PermissionState.Unrestricted);
public RequirePermissionAttribute(SecurityAction action)
: base(action) {
}
public string Permission { get; set; }
public override IPermission CreatePermission() {
if (User.HasPermission(Permission))
return _allow;
else
return _deny;
}
}
:
[ServiceContract]
public class Service {
[OperationContract]
[RequirePermission(SecurityAction.Demand, Permission = "GetArbitaryProduct")]
public User GetProduct(string name) {
return _productRepository.Get(name);
}
}
을 내가 CreatePermission
방법을 반환하는 경우 GetProduct
-_deny
접근이 제한 될 것으로 예상 그것을 구현하기 위해 나는 CodeAccessSecurityAttribute
에서 파생 된 다음 서브 클래스를 만들었습니다 . 그러나 그것은 CodeAccessSecurity
이 이런 식으로 작동하지 않는 것 같습니다. 액세스를 올바르게 제한하기 위해 예외를 throw해야합니까? 아니면 그것을 달성하는 더 우아한 방법이 있을까요?
현재 문제가되지 않습니다. 발신자에게 어떤 요구 사항도 없으므로 원하는대로 구현할 수 있습니다. 그러나 형체가 잘못되었다고 생각합니다. – sam
입력 된 오류를 선호하는 경우 SecurityException을 던져 버릴 수있는 권한을 부여하는 기본 경로로 이동하는 것이 가장 간단한 방법 일 수 있습니다. WCF 클라이언트 (http://msdn.microsoft.com/en-us/magazine/cc948343.aspx#id0070004)에서 SecurityAccessDeniedException에 매핑되는 오류가 WCF 내부에 자동으로 생성됩니다. –