Я внедряю службу WCF, которая использует распространение транзакций.
Для авторизации используется модель безопасности ASP .nET с SQL Server (SqlRoleProvider). Я использую декларативную безопасность через атрибут PrincipalPermission, как показано ниже.
[ServiceBehavior(TransactionIsolationLevel = IsolationLevel.Serializable)]
public class MyService : IMyService
{
[PrincipalPermission(SecurityAction.Demand, Role = "RoleName")]
[OperationBehavior(TransactionScopeRequired = true)]
public void DoSomething()
{
}
}
Вот вопрос:
Я вижу, что проверка авторизации (IsInRole) PrincipalPermission использует распространяющуюся транзакцию в качестве внешней транзакции для доступа к базе данных безопасности ASP.NET. Я не хочу этого, так как это блокирует таблицы в базе данных безопасности ASP.NET. Кроме того, это концептуально неправильно, так как это только проверка прав доступа и совершенно не связано с изменениями, внесенными в бизнес-базу данных.
Я понимаю, что могу отказаться от заявленной модели безопасности и программно выполнить проверку IsInRole, используя новый TransactionScope (используя TransactionScopeOption.Suppress или TransactionScopeOption.RequiresNew, когда это необходимо), но возможно ли достичь этого, сохранив декларативную модель безопасности?