2013-02-26 2 views
0

У меня есть настраиваемый атрибут authorize, который в основном просто проверяет, что cookie был отправлен с запросом и что он имеет назначенное значение.Пользовательский атрибут authorize - могу ли я сохранить значение позже?

public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext == null) 
      throw new ArgumentNullException("filterContext"); 

     bool skipAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true) 
         || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true); 

     if (skipAuthorization) return; 

     var cookie = filterContext.HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName]; 

     if (cookie != null) 
     { 
      var decCookie = FormsAuthentication.Decrypt(cookie.Value); 

      if(decCookie != null) 
      { 
       if (!string.IsNullOrEmpty(decCookie.UserData)) 
       { 
        return; 
       } 
      } 
     } 

     HandleUnauthorizedRequest(filterContext); 
    } 

Это делает то, что мне нужно, но это возможно для меня, чтобы сохранить decCookie.UserData где-то, что она может быть доступна в действии контроллера? Я сделал метод расширения, который в любом случае будет извлекать его в контроллере, но это действительно просто копия того, что уже сделал атрибут.

Итак, есть ли способ, которым я могу избежать использования метода расширения и просто сохранить UserData где-нибудь для последующего использования в контроллере прямо из атрибута?

ответ

1

Используйте пользовательский принцип и идентификационную информацию и сохраните любые данные, которые вы хотели бы узнать. См. MVC 3.0, Razor, Custom Principal and Identity. За хорошее введение. Только проигнорируйте бит об использовании Application_AuthenticateRequest, вот для чего ваш атрибут Authorize.

+0

Это было замечательно! – Zholen

Смежные вопросы