【发布时间】:2010-05-04 13:52:40
【问题描述】:
我正在实现一个使用事务传播的 WCF 服务。
带有 SQL Server (SqlRoleProvider) 的 ASP .nET 安全模型用于授权。我正在通过 PrincipalPermission 属性使用声明式安全性,如下所示。
[ServiceBehavior(TransactionIsolationLevel = IsolationLevel.Serializable)]
public class MyService : IMyService
{
[PrincipalPermission(SecurityAction.Demand, Role = "RoleName")]
[OperationBehavior(TransactionScopeRequired = true)]
public void DoSomething()
{
}
}
问题来了:
我看到的是 PrincipalPermission 的授权检查 (IsInRole) 使用传播的事务作为环境事务来访问 ASP.NET 安全数据库。我不希望这样,因为这会锁定 ASP.NET 安全数据库中的表。此外,它在概念上是错误的,因为它只是一个访问权限检查,与在业务数据库中所做的修改完全无关。
我知道我可以放弃声明性安全模型并使用新的 TransactionScope 以编程方式进行 IsInRole 检查(在适当时使用 TransactionScopeOption.Suppress 或 TransactionScopeOption.RequiresNew),但是否可以在保留声明性安全模型的同时实现这一点?
【问题讨论】:
标签: c# wcf security transactions