2013-02-26 58 views
0

我有一个自定义的授权属性,基本上只是验证一个cookie与请求一起发送,并且它有一个赋值。自定义授权属性 - 以后可以存储值吗?

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 2013-02-26 20:33:46

相关问题