Мы недавно обновили mvc2 до mvc3, и один из наших пользовательских фильтров авторизации (которые используются в методах ActionResult), похоже, создается один раз, но выполняется несколько раз.Мы знаем это, поскольку Фильтр содержит список ошибок (который был обновлен в конструкторе), и ошибки добавляются в AuthorizeCore.
Пользовательский фильтр используется для проверки прав доступа пользователей к определенномуМетод действия (и их уровень хранится в сеансе)
Некоторый код:
public class SecurityAttribute : AuthorizeAttribute
{
public int MinAccessLevel = 1;
public string UserRole = String.Empty;
private List<string> _errors;
public SecurityAttribute()
{
_errors = new List<string>();
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (WebSession.AccessLevel < MinAccessLevel)
_errors.Add("Your access level(" + WebSession.AccessLevel + ") must be " + MinAccessLevel + " or higher");
if (!String.IsNullOrEmpty(UserRole) && WebSession.UserRole != UserRole)
_errors.Add("Your User Role must be " + UserRole);
if (_errors.Any())
{
var viewResult = new ViewResult() { ViewName = "SecurityError"};
viewResult.ViewData.Model = new SecurityErrorViewModel(){Errors = _errors};
filterContext.Result = viewResult;
}
}
}
Это можно использовать, как показано ниже:
[HttpPost, Security(MinAccessLevel = 4)]
public ActionResult Complete(int id, string userid){}
Выход напредставление (через произвольные интервалы) выглядит так (в маркированном списке)
- Ваш уровень доступа (6) должен быть 4 или выше
- Ваш уровень доступа (6) должен быть4 или выше
- Ваш уровень доступа (6) должен быть 4 или выше
- Ваш уровень доступа (6) должен быть 4 или выше
Эта проблема возникла толькоПосле того, как мы обновились до mvc3, я ищу какие-либо подсказки о том, почему это могло произойти, или соответствующее исправление.Я читал различные сообщения SO, касающиеся контроллеров Sessionless State и тому подобного, но, похоже, это не соответствует сценарию, с которым мы сталкиваемся
Спасибо, Марк